我正在尝试在场景中为聚光灯建模,以介绍图形类。作业指定我必须在modernGL 中做所有事情,因此我不能使用遗留的任何东西。
我一直在阅读 OpenGL 4.0 Shading Language Cookbook 以寻求帮助,但我不知道如何获取我的灯光的眼空间坐标。我知道我希望灯光在世界空间中的位置和方向,并且我尝试通过以下方式将它们转换为眼睛空间。
//mv = inverse(mv);
vec3 light = vec3(vec4(0.0, 15.0, 0.0, 1.0) * mv);
vec3 direction = vec3(vec4(0.0, -1.0, 0.0, 1.0) * mv);
其中 mv 是我的模型视图矩阵由
glm::mat4 modelview_matrix = glm::lookAt(glm::vec3(window.camera.x, window.camera.y, window.camera.z), glm::vec3(0.0f, 0.0f, 0.0f), glm::vec3(0.0f, 1.0f, 0.0f));
没有任何变换。如您所见,我试图乘以模型视图和模型视图的倒数来获得眼睛空间。我很肯定这些都没有起作用,因为当我移动到对象的另一侧时,我的对象上的镜面高光随之而来。(即,如果我正在看物体的另一侧,我不应该看到高光。)