如何为在 OpenGL 中绘制的不同对象设置单独的 Material 属性? 我做了以下代码,显然只显示了后来的颜色:
//************** Object 1 **************
glEnable(GL_COLOR_MATERIAL);
glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE);
glColor4f(149.0/255.0, 78.0/255.0, 22.0/255.0, 1.0);
float mat_specular[] = {0.992157, 0.941176, 0.807843, 1.0};
float shininess = 10;
glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
glMaterialf(GL_FRONT, GL_SHININESS, shininess);
glPushMatrix();
glTranslatef(0, 3.0, 0);
drawSphere(0.1, 0.1, 0.1);
glRotatef(10, 1, 0, 0);
glDisable(GL_COLOR_MATERIAL);
//************** Object 2 *****************
glEnable(GL_COLOR_MATERIAL);
glColorMaterial(GL_FRONT, GL_DIFFUSE);
glColor4f(48.0/255.0, 48.0/255.0, 48.0/255.0, 1.0);
float mat_specular_2[] = {0.992157, 0.941176, 0.807843, 1.0};
float shininess_2 = 10;
glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular_2);
glMaterialf(GL_FRONT, GL_SHININESS, shininess_2);
glPushMatrix();
glTranslatef(-0.6, 0.2, 1.6/2.0);
drawSphere(0.1, 0.1, 0.1);
glPopMatrix();
glDisable(GL_COLOR_MATERIAL);
渲染时,为对象 2 设置的颜色将用于整个场景。因此,对象 1 也以对象 2 的颜色呈现,尽管它已经设置了自己的颜色。
我怎样才能让这 2 个对象具有单独的 Material 属性,以便它们可以显示为不同的颜色,而不是在整个场景中只显示一种颜色?
最佳答案
你应该放:
glEnable(GL_COLOR_MATERIAL);
作为渲染函数中的第一件事,然后设置光照参数:
glDisable(GL_COLOR_MATERIAL);
glPushMatrix();
然后设置 Material 的属性,调用对象。从现在开始,所有对象都将具有此属性,如果您想在另一个对象上使用另一种 Material ,只需键入:
glDisable(GL_COLOR_MATERIAL);
再次,在对第二个对象建模之前,依此类推。如果您仍有疑问,请尽管提问。
关于c++ - 在 OpenGL 中为不同的对象设置单独的 Material 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7735203/