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();
}

https://www.youtube.com/watch?annotation_id=annotation_1430411783&feature=iv&index=86&list=PLRwVmtr-pp06qT6ckboaOhnm9FxmzHpbY&src_vid=NH68sIdF-48&v=P3DQXzyjswQ

原来我没有计算世界 space 中的光照。

我没有使用转置的 modelworldposition,而是使用了普通的顶点位置