c++ - OpenGL光照问题

标签 c++ opengl

我的所有 OpenGL 光照都正常工作,包括法线、 Material 等......

我的问题是当光线在脸部后面时 OpenGL 渲染脸部的方式。如果光在脸后面,它应该渲染一张黑色的脸,但它渲染的是脸的背面。我该如何阻止这种奇怪的行为。我发现很难描述发生了什么,但希望你知道如何解决这个问题。

提前致谢。

编辑:好的,假设我有一个扁平的正方形多边形来代表一堵墙。无论我打开哪一侧的灯,即使只有一侧应该点亮而另一侧应该是黑色的(或者由于其他/环境光而非常暗),两者都会被点亮。看到问题了吗?它就像纸一样,因为光线只是穿过并出现在脸部错误的一侧。

最佳答案

出现您所看到的问题是因为多边形的两侧在其光照计算中使用相同的法线。

解决办法是设置:

float modelTwoside[] = {GL_TRUE};
glLightModelfv(GL_LIGHT_MODEL_TWO_SIDE, modelTwoside);

这会导致 OpenGL 在渲染背面之前反转法线。 OpenGL 也将使用背面 Material 。

关于c++ - OpenGL光照问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4116261/

相关文章:

c++ - 有一个返回 int 的函数,如何使用 boost 在单独的线程中运行它?

C# OpenGL字体显示

c++ - 函数返回类型说明符 c++type 中的变量声明

c++ - 模板函数参数转换

c++ - 旋转 4 圈后物体回到初始位置

c++ - 使用顶点缓冲对象 (VBO) 渲染 Kinect 点云

java - 在类的构造函数中找出实例化对象

opengl - 模板缓冲区在现代 OpenGL 中是否仍然相关?

c++ - Visual Leak Detector 在 ntdll.dll 上抛出 "Access violation reading location"

c++ - 在连续内存中存储任意元素