C++ 基本OpenGL照明问题

C++ 基本OpenGL照明问题,c++,opengl,lighting,C++,Opengl,Lighting,我认为这是一个非常愚蠢和新手的问题,但我是图形和openGL的新手。画了一个球体并在附近放置了一个光源,也指定了环境光,我开始试验光和材质值,得出了一个令人惊讶的结论:当启用照明时,我们使用glColor*指定的颜色根本不重要。相反,等效物是材质的环境分量。这个结论正确吗?谢谢我想您还没有使用片段着色器。发件人: 因此,是的,不使用顶点颜色 编辑:您还可以在GL规范中查找GL lightning等式(您附近有一个,是吗?^^^)如果启用了照明,则使用材质颜色而不是顶点颜色(嗯,颜色-对于不同类型

我认为这是一个非常愚蠢和新手的问题,但我是图形和openGL的新手。画了一个球体并在附近放置了一个光源,也指定了环境光,我开始试验光和材质值,得出了一个令人惊讶的结论:当启用照明时,我们使用
glColor*
指定的颜色根本不重要。相反,等效物是材质的环境分量。这个结论正确吗?谢谢

我想您还没有使用片段着色器。发件人:

因此,是的,不使用顶点颜色


编辑:您还可以在GL规范中查找GL lightning等式(您附近有一个,是吗?^^^)

如果启用了照明,则使用材质颜色而不是顶点颜色(嗯,颜色-对于不同类型的光响应有几种颜色)。材质颜色由
glMaterial*
函数指定

如果要重用代码,可以使用
glEnable(GL\U COLOR\U MATERIAL)
glColorMaterial(GL\U AMBIENT\U and\U DIFFUSE)
将旧的
glColor*
调用自动映射到材质颜色


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

我听说过很多关于这些着色器的事情,但我不知道它们是什么。我想在我读到红皮书的相关章节之前我必须耐心:)谢谢你的回答红皮书和我们正在讨论的整个固定函数渲染一样过时。你可以从中找到一些理论,就这样。对于着色器教程,请使用google For Lighthouse 3D.:)还可以浏览一下OpenGL.org/documentation/specs/上的OpenGL 2.1或OpenGL 3参考文档-它们有点大,但略读一下会让您对OGL的工作原理有一个很好的了解。@Kos:如果红皮书已经过时,您会推荐哪本书?文档不是一本书,它是一件好事,但初学者发现很难直接使用文档直接从文档中学习绝对是每个程序员技能树中所必需的技能,但我同意教程或书籍让初学者更容易开始学习,因为它们缩短了从开始学习到看到有用的东西之间的时间,这是很重要的。然而,同样重要的是把医生放在枕头下,并试着用它来回答问题。我不能推荐任何一本书,但我真诚地相信Lighthouse 3D教程(或在线提供的其他教程)对于OpenGL初学者来说应该足够了。@Armen:您拥有哪个版本的红皮书?
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