2010-11-13 79 views
4

我认为这是一个非常愚蠢和新手的问题,但后来我是一个图形和OpenGL的新手。绘制了一个球体并在附近放置了一个光源,并且指定了环境光线后,我开始尝试光线和材质值,并得出了一个令人惊讶的结论:启用光照时,我们用glColor*指定的颜色完全不重要。相反,等价物是材料的环境成分。这个结论是否正确?谢谢基本的OpenGL灯光问题

回答

5

GL闪电式如果启用了照明,然后,而不是顶点颜色,材质颜色(好吧,颜色 - 其中有几种适用于不同类型的光线响应)使用。材料颜色由glMaterial*函数指定。

如果要重复使用代码,可以使用glEnable(GL_COLOR_MATERIAL)glColorMaterial(GL_AMBIENT_AND_DIFFUSE)将旧的glColor*调用自动映射到材质颜色。

(并请尽可能快地切换到着色器 - 着色器的方法是双方更容易和更强大)

+0

我听到了很多关于这些着色器,但我不知道它们是什么。我想我必须耐心等待,直到我到达红皮书的相关章节为止:)感谢您的回答 – 2010-11-13 13:38:20

+0

红皮书与我们正在讨论的整个固定功能渲染一样过时。你可以阅读它的一些理论,就是这样。对于着色器教程,Google for Lighthouse3D。 :)也可以浏览一下opengl.org/documentation/specs/上的OpenGL 2.1或OpenGL 3参考文档 - 它们有点大,但是略过会让你知道OGL是如何工作的。 – Kos 2010-11-13 13:52:37

+0

@Kos:如果红皮书已经过时,你会推荐哪本书?文档不是一本书,它是一件好事,但初学者发现很难直接使用文档 – 2010-11-13 15:49:15

3

我想你还没有使用片段着色器。从glprogramming.com

vertex color = 
    the material emission at that vertex + 
    the global ambient light scaled by the materials ambient 
    property at that vertex + 
    the ambient, diffuse, and specular contributions from all the 
    light sources, properly attenuated 

所以,是的,没有使用顶点颜色。

编辑:您还可以在GL规范(你有一个在附近,你^^?)