Opengl光照神器(平移前计算光照)
Opengl Lighting Artifact (calculating light before translation)
我正在尝试在 opengl 中创建一个场景,但我的光照有问题。我相信这与将我的模型从世界的起源转移到它们各自的位置有关。
我的场景中只有 1 盏灯位于世界中心的右侧,但是您可以在场景前方的墙上看到灯。
我已经编写了自己的着色器。我怀疑我计算光照太早了,因为它似乎是在模型被翻译到世界各地之前计算的,或者我使用的是本地坐标而不是世界坐标(我认为那是对的......) .
(请忽略玻璃,它们使用的是全局光和不同的着色器)
有谁知道情况是否确实如此,或者哪里是找到解决方案的最佳地点。
下面是我调用渲染模型的方式。
glUseProgram(modelShader);
//center floor mat
if (floorMat)
{
glUniformMatrix4fv(modelShader_modelMatrixLocation, 1, GL_FALSE, (GLfloat*)&(modelTransform.M));
floorMat->setTextureForModel(carpetTexture);
floorMat->renderTexturedModel();
}
原来我没有计算世界 space 中的光照。
我没有使用转置的 modelworldposition,而是使用了普通的顶点位置
我正在尝试在 opengl 中创建一个场景,但我的光照有问题。我相信这与将我的模型从世界的起源转移到它们各自的位置有关。
我的场景中只有 1 盏灯位于世界中心的右侧,但是您可以在场景前方的墙上看到灯。
我已经编写了自己的着色器。我怀疑我计算光照太早了,因为它似乎是在模型被翻译到世界各地之前计算的,或者我使用的是本地坐标而不是世界坐标(我认为那是对的......) .
(请忽略玻璃,它们使用的是全局光和不同的着色器)
有谁知道情况是否确实如此,或者哪里是找到解决方案的最佳地点。
下面是我调用渲染模型的方式。
glUseProgram(modelShader);
//center floor mat
if (floorMat)
{
glUniformMatrix4fv(modelShader_modelMatrixLocation, 1, GL_FALSE, (GLfloat*)&(modelTransform.M));
floorMat->setTextureForModel(carpetTexture);
floorMat->renderTexturedModel();
}
原来我没有计算世界 space 中的光照。
我没有使用转置的 modelworldposition,而是使用了普通的顶点位置