1. 设置材料的颜色
OpenGL的光照模型根据材料反射的红、绿和蓝光的比例来模拟它的颜色。和光一样,材料也具有不同的环境、散射和镜面颜色,它们决定了材料对红、绿和蓝光的反射率。材料的环境反射属性与每种入射光的环境光成分组合,散射反射属性与入射光的散射成分组合,镜面反射属性和入射光的镜面成分组合。环境和散射属性定义了材料的颜色,它们一般很相似。
使用的函数是glMaterial*():
void glMaterial{if} (GLenumface, GLenumpname, GLfloatparam); void glMaterial{if}v (GLenumface, GLenumpname, constGLfloat *params); |
face可以是GL_FRONT,GL_BACK或GL_FRONT_AND BACK,表示物体的哪些面应该接受光照。pname表示设置的特定材料属性。param提供了具体的属性值。
我们设置桌面和四条桌腿的材料如下:
void Draw_Table() // This function draws a triangle with RGB colors { //定义变量 GLfloat specular[] = { 0.6f,0.6f,0.6f,1.0f }; GLfloat color1[] = { 0.85f,0.65f,0.2f,1.0f };//金黄色 GLfloat color2[] = { 1.0f,0.0f,0.0f }; GLfloat color3[] = { 0.0f,1.0f,0.0f }; GLfloat color4[] = { 1.0f,1.0f,0.0f }; GLfloat color5[] = { 0.0f,1.0f,1.0f }; GLfloat color6[] = { 0.0f,0.0f,1.0f }; //茶壶 glPushMatrix(); glMaterialfv(GL_FRONT, GL_SPECULAR, specular);//设置镜面颜色 glMateriali(GL_FRONT, GL_SHININESS, 50);//设置镜面指数 glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, color1);//材料的环境和散射颜色 glTranslatef(0, 0, 4+1); glRotatef(90, 1, 0, 0); glutSolidTeapot(1); glPopMatrix(); //桌面 glPushMatrix(); glMaterialfv(GL_FRONT, GL_SPECULAR, color2);//设置镜面颜色</ |