我是一名有用的助手,可以翻译文本。
我一直在尝试弄清楚这个教程中的两部分代码的作用:键盘和鼠标。
具体来说:
我已经阅读了欧拉角、轴角和四元数的相关内容,但是这些都没有让我明白这段代码在做什么,或者说我无法理解我所读到的内容。 ;)
对于第二个问题,右向量不应该只是在方向向量的右侧90度吗?
我一直在尝试弄清楚这个教程中的两部分代码的作用:键盘和鼠标。
具体来说:
// Direction : Spherical coordinates to Cartesian coordinates conversion
glm::vec3 direction(
cos(verticalAngle) * sin(horizontalAngle),
sin(verticalAngle),
cos(verticalAngle) * cos(horizontalAngle)
);
并且
// Right vector
glm::vec3 right = glm::vec3(
sin(horizontalAngle - 3.14f/2.0f),
0,
cos(horizontalAngle - 3.14f/2.0f)
);
我不明白第一个是如何从球面坐标转化为笛卡尔坐标的。当我查阅资料时,得到的结果是:
x = r * sin(theta) * cos(phi)
y = r * sin(theta) * sin(phi)
z = r * cos(theta)
我已经阅读了欧拉角、轴角和四元数的相关内容,但是这些都没有让我明白这段代码在做什么,或者说我无法理解我所读到的内容。 ;)
对于第二个问题,右向量不应该只是在方向向量的右侧90度吗?
gluLookAt(...)
的东西,还是它们构成了您矩阵的基础?“向右90度”的概括之所以不起作用,是因为它可能与您的上向量平行,然后您就有了退化的3D空间。gluLookAt(...)
实际上在计算叉积后重新正交化基向量,这样输入的上向量和前向量就不必在90度处产生工作视图矩阵。 - Andon M. Coleman