说明
如果非常清楚的知道物体的材质,并且能够在OpenGL的材质表中找到合乎要求的参数设置,就可以避免指定物体的颜色值,某些情况下,指定物体的渲染颜色,使得物体的实际效果大打折扣
{
glPushMatrix();
glTranslatef(1.0, 0.0, 0.0);
//黄铜
GLfloat mat_ambient[] = { 0.021500, 0.174500, 0.021500, 0.550000};
GLfloat mat_diffuse[] = { 0.075680, 0.614240, 0.075680, 0.550000};
GLfloat mat_specular[] = { 0.633000, 0.727811, 0.633000, 0.550000 };
GLfloat mat_shininess[] = { 76.800003}; //材质RGBA镜面指数,数值在0~128范围内
glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);
glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);
glutSolidSphere (1.0, 40, 50); //半径为 1,40 条纬线,50 条经线
glPopMatrix();
glFlush ();
}
{
glPushMatrix();
glTranslatef(-1.0, 0.0, 0.0);
//翡翠绿
GLfloat mat_ambient[] = { 0.247250, 0.199500, 0.074500, 1.000000};
GLfloat mat_diffuse[] = { 0.751640, 0.606480, 0.226480, 1.000000};
GLfloat mat_specular[] = { 0.628281, 0.555802, 0.366065, 1.000000 };
GLfloat mat_shininess[] = { 51.200001}; //材质RGBA镜面指数,数值在0~128范围内
glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);
glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);
glutSolidSphere (1.0, 40, 50); //半径为 1,40 条纬线,50 条经线
glPopMatrix();
}
材质表
//黄铜
0.329412, 0.223529, 0.027451, 1.000000,
0.780392, 0.568627, 0.113725, 1.000000,
0.992157, 0.941176, 0.807843, 1.000000,
27.897400,
//青铜
0.212500, 0.127500, 0.054000, 1.000000,
0.714000, 0.428400, 0.181440, 1.000000,
0.393548, 0.271906, 0.166721, 1.000000,
25.600000,<