gpt4 book ai didi

c++ - 将光世界空间坐标转换为眼空间坐标

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:57:51 24 4
gpt4 key购买 nike

我正在尝试为场景中的聚光灯建模以介绍图形类(class)。作业指定我必须在 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 是我生成的模型 View 矩阵

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

没有任何变换。如您所见,我试图乘以模型 View 和模型 View 的倒数来获得视野。我很肯定,当我移动到物体的另一侧时,这些都没有起作用,因为我的物体上的镜面高光随之而来。 (即,如果我正在看物体的反面,我不应该看到镜面高光。)

最佳答案

我很确定你想要:

vec3 light = vec3(mv * vec4(0.0, 15.0, 0.0, 1.0));
vec3 direction = vec3(mv * vec4(0.0, -1.0, 0.0, 0.0));
// ^ Note the 0 in the w coordinate

在您没有反转您的mv 矩阵的地方。是的,乘法的顺序很重要。在 w 坐标中留下 0 的原因是因为您不想平移方向 vector ,只希望缩放或旋转。

关于c++ - 将光世界空间坐标转换为眼空间坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15456688/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com