OpenGL 中的颜色、光照和材质

Click here to load reader

download OpenGL  中的颜色、光照和材质

of 49

description

OpenGL 中的颜色、光照和材质. 简单光照 OpenGL 简单光照光源分为:. 简单光照 OpenGL 简单光照光源分为: 辐射光 (Emitted Light) 是最简单的一种光,它直接从物体发出并且不受任何光源影响。 环境光 (Ambient Light) 是由光源发出经环境多次散射而无法确定其方向的光,即似乎来自所有方向。 漫射光 (Diffuse Light) 来自一个方向,它垂直于物体时比倾斜时更明亮。 镜面光 (Specular Light) 来自特定方向并沿另一方向反射出去。. 向场景中加入光照的步骤如下:. - PowerPoint PPT Presentation

Transcript of OpenGL 中的颜色、光照和材质

  • OpenGL

  • OpenGL OpenGL (Emitted Light) (Ambient Light) (Diffuse Light) (Specular Light)

  • 1. 2. 3. () 4.

  • ()1.glNormal3fv(n0);glVertex3fv(v0); 2. glLightfv(GL_LIGHT0,GL_POSITION,light_position); glLightfv(GL_LIGHT0,GL_AMBIENT,light_ambient);GL_POSITION(0,0,1,0),Z. 3.. glLightModelfv(GL_LIGHT_MODEL_AMBIENT,lmodel_ambient); glLightModelfv(GL_LIGHT_MODEL_LOCAL_VIEWER,lmodel_viewer). 4.glEnable(GL_LIGHTING);glEnable(GL_LIGHT0); 5. glMaterialfv(GLenum face, GLenum pname, Type* param)GL_AMBIENT, GL_DIFFUSE, GL_AMBIENT_AND_DIFFUSE, GL_SPECULAR, GL_SHINNESS, GL_EMISSION.

  • 1 void glLight{if}[v]( GLenum light , GLenum pname , TYPE param ) light GL_LIGHT0 GL_LIGHT1 GL_LIGHT2 ... ... pname param

  • 1:glLightfv

    glLightfv(GL_LIGHT0,GL_AMBIENT,light_ambient);//0GL_LIGHT0()glLightfv(GL_LIGHT0,GL_DIFFUSE,light_diffuse);//0GL_LIGHT0()

    glLightfv(GL_LIGHT0,GL_POSITION,light_position);//()

  • float lightAmbient[] = { 0.2f, 0.0f, 0.0f, 1.0f }; //4 ,1 float lightDiffuse[] = { 0.5f, 0.0f, 0.0f, 1.0f }; //.float lightSpecular[] = { 1.0f, 1.0f, 1.0f, 1.0f };// //

  • glLight*glLight*

  • 1GL_AMBIENTGL_DIFFUSEGL_SPECULARR, G, B, AGL_AMBIENTGL_DIFFUSEGL_SPECULAR

  • 2GL_POSITIONX, Y, Z, WWWX/W, Y/W, Z/W

  • 1glTranslate*glRotate*

  • 2 OpenGLGL_LIGHT00GL_LIGHT11OpenGL8GL_LIGHT0GL_LIGHT7

  • GL_LIGHT0 GL_DIFFUSE GL_SPECULAR ( 1.0 ,1.0 ,1.0 ,1.0 ) GL_DIFFUSE GL_SPECULAR ( 0.0 ,0.0 ,0.0 ,1.0 )

  • 2glLightModel*

    glLightModel*() glLightModelfv(GL_LIGHT_MODEL_AMBIENT,Imodel_ambient);glLightModelfv(GL_LIGHT_MODEL_TWO_SIDE,Imodel_twoside);

  • ;;;GL_SPECULAR)

  • GL_LIGHT_MODEL_AMBIENTGL_LIGHT_MODEL_AMBIENTOpenGL0.20.20.21.0 GL_LIGHT_MODEL_LOCAL_VIEWERGL_TRUEGL_FALSE GL_LIGHT_MODEL_TWO_SIDEGL_TRUEOpenGL GL_LIGHT_MODEL_COLOR_CONTROLGL_SINGLE_COLORGL_SEPARATE_SPECULAR_COLORGL_SPECULARGL_SPECULAR.

  • 3 glEnableglEnable :glEnable(GL_LIGHT0);0glDisable OpenGL

  • :glEnable( GL_LIGHTING ); // glEnable( GL_LIGHT0 ); //

  • :glMaterialfv

    glMaterialfv(GLenum face, GLenum pname, Type* param).

    /**/glMaterialfv(GL_FRONT,GL_DIFFUSE,front_mat_diffuse);glMaterialfv(GL_FRONT,GL_SPECULAR,front_mat_specular);glMaterialfv(GL_FRONT,GL_SHININESS,front_mat_shininess);/**/glMaterialfv(GL_BACK,GL_DIFFUSE,back_mat_diffuse);glMaterialfv(GL_BACK,GL_SPECULAR,back_mat_specular);glMaterialfv(GL_BACK,GL_SHININESS,back_mat_shininess);

  • glLight*glMaterial*

  • glMaterial*GL_FRONTGL_BACKGL_FRONT_AND_BACKglLight*glMaterial*

  • 1GL_AMBIENTGL_DIFFUSEGL_SPECULARGL_AMBIENTGL_DIFFUSEGL_SPECULARGL_AMBIENTGL_DIFFUSEGL_AMBIENT_AND_DIFFUSEGL_AMBIENTGL_DIFFUSE

  • 2GL_SHININESS0128

  • 3GL_EMISSIONOpenGL

  • 4GL_COLOR_INDEXESRGBA

  • OpenGL

  • OpenGL

  • glShadeModelglShadeModelopenglGL_SMOOTH,GL_FLATOpenGL GL_SMOOTHGL_FLAT

  • glDepthFuncglDepthFunc()void glDepthFunc(GLenum func) GL_LESS GL_LEQUAL

  • glDepthFunc

  • glMatrixModeglMatrixMode void glMatrixMode(GLenum mode) mode ,: GL_MODELVIEWGL_PROJECTIONGL_TEXTURE. glMatrixMode: GL_MODELVIEW,. GL_PROJECTION,. GL_TEXTURE,. glMatrixMode glLoadIdentity() glLoadIdentity(): glLoadIdentity()glMatrixMode(GL_MODELVIEW)

  • glColorMaterial glColor*()glColor void glColorMaterial(GLenum face,GLenum mode) face: GL_FRONT GL_BACK GL_FRONT_AND_BACK mode: GL_AMBIENT GL_DIFFUSE GL_AMBIENT_AND_DIFFUSE GL_SPECULAR GL_EMISSION

  • glColorMaterialglEnable(GL_COLOR_MATERIAL);glColorglColor*Enable

  • // glColorMaterial(GL_FRONT,GL_AMBIENT); //glEnable(GL_COLOR_MATERIAL); glMaterialfv(GL_FRONT,GL_DIFFUSE,material_diffuse); glMaterialfv(GL_FRONT,GL_SPECULAR,material_specular); glMaterialfv(GL_FRONT,GL_SHININESS,high_shininess); glMaterialfv(GL_FRONT,GL_EMISSION,no_mat);

  • // glColorMaterial(GL_FRONT,GL_AMBIENT); //glEnable(GL_COLOR_MATERIAL); GLfloat no_mat[]={0.0,0.0,0.0,1.0};GLfloat mat_grey_ambient[]={0.5,0.5,0.5,1.0};GLfloat mat_red_ambient[]={0.0,0.0,1.0,1.0};

  • GLfloat light_position[]={0.0,3.0,6.0,0.0};//GLfloat material_diffuse[]={0.8,0.2,0.5,1.0};//GLfloat material_specular[]={1.0,1.0,1.0,1.0};//

    GLfloat material_diffuse[]={0.0,0.0,0.5,1.0};//

  • glColorMaterial() glMaterial*()

  • 1

    . . . .. .OpenGL.

  • 2OpenGL. R,G,BR,G,B. . .

  • 3OpenGL

    (0.0,0.0,0.0,1.0). (1.0,1.0,1.0,1.0). GL_LIGNT0GL_SPECULAR(1.0,1.0,1.0,1.0)(0.0,0.0,0.0,0.0).GL_SPECULARGL_DIFFUSE. . (0.2,0.2,0.2,1.0)0.0GL_FALSE,GL_LIGHT_MODEL_TWO_SIDE0.0GL_FALSE()GL_LIGHT_MODEL_COLOR_CONTROLGL_SINGLE_COLOR. GL_AMBIENT (0.2,0.2,0.2,1.0); GL_DIFFUSE (0.8,0.8,0.8,1.0); GL_SPECULAR (0.0,0.0,0.0,1.0); GL_SHINNESS 0.0; GL_EMISSION (0.0,0.0,0.0,1.0).

  • gluLookAt():void gluLookAt(GLdouble eyex,GLdouble eyey,GLdouble eyez,GLdouble centerx,GLdouble centery,GLdouble centerz,GLdouble upx,GLdouble upy,GLdouble upz); gluLookAt() GL_MODELVIEWgluPerspectiveGL_PROJECTION gluPerspective

    ()face:GL_FRONTGL_BACKGL_FRONT_AND_BACK, suneyex,eyey,eyezcenterxcenterycenterzupxupyupz