首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在OpenGL中为不同对象设置单独的材质属性

在OpenGL中为不同对象设置单独的材质属性
EN

Stack Overflow用户
提问于 2011-10-12 12:16:47
回答 3查看 8.7K关注 0票数 6

如何在OpenGL中为不同对象绘制单独的材质特性?我执行了以下代码,显然只显示了后面的颜色:

代码语言:javascript
复制
//************** 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的颜色呈现,尽管已经设置了它自己的颜色。

如何让两个对象具有单独的材质属性,以便它们可以显示为不同的颜色,而不是在整个场景中只显示一种颜色?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-10-12 20:07:02

首先,你的示例代码看起来很合理,你的对象确实应该有不同的材料。

但请记住,您只更改了第二个对象的漫反射材质颜色,因为您为两个对象设置了完全相同的镜面反射颜色和反光度值。第二个对象的环境光也与第一个对象的环境光相同,因为只为漫反射通道启用了颜色材质,因此环境光与第一个对象相同,因为OpenGL是状态机

因此,对象之间唯一的材质差异是它们的漫反射颜色,此差异为(101,30,26)。那么,这种差异会不会被完全相等的环境项和镜面项所抵消,因此对你来说太小了?尝试完全不同的材料,看看是否真的没有区别。

票数 2
EN

Stack Overflow用户

发布于 2012-05-19 07:36:08

您应该放入:

代码语言:javascript
复制
glEnable(GL_COLOR_MATERIAL);

作为渲染函数中的第一件事,然后设置灯光参数:

代码语言:javascript
复制
glDisable(GL_COLOR_MATERIAL);
glPushMatrix();

然后设置材质的属性并调用该对象。从现在开始,所有对象都将具有此属性,如果要在另一个对象上使用另一种材质,只需键入:

代码语言:javascript
复制
glDisable(GL_COLOR_MATERIAL);

同样,在建模第二个对象之前,依此类推。如果你还有问题,尽管问。

票数 4
EN

Stack Overflow用户

发布于 2012-04-29 02:29:37

在绘制第一个对象后,您似乎错过了一个glPopMatrix。我不知道这会如何改变事情。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7735203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档