基本的OpenGL照明问题

时间:2010-11-13 13:23:27

标签: c++ opengl lighting

我认为这是一个非常愚蠢和新手的问题,但后来我成了图形和openGL的新手。绘制了一个球体并将光源放在附近,同时指定了环境光,我开始尝试光和材料值,得出一个令人惊讶的结论:我们用glColor*指定的颜色在照明时根本不重要已启用。相反,等效物是材料的环境组件。这个结论是否正确?感谢

2 个答案:

答案 0 :(得分:5)

如果启用了光照,那么代替顶点颜色,材质颜色 (好吧,颜色 - 其中有几种用于不同类型的光响应)被使用。材质颜色由glMaterial*函数指定。

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

(请尽快切换到着色器 - 着色器方法既简单又强大)

答案 1 :(得分: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规范中查找GL闪电方程式(您附近有一个,是吗?^^)