gpt4 book ai didi

OpenGL相机/方向矢量

转载 作者:行者123 更新时间:2023-12-02 04:21:15 25 4
gpt4 key购买 nike

我一直试图弄清楚本教程中的两部分代码在做什么:Keyboard and Mouse

具体:

// 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 度吗?

最佳答案

这与教程制作者以及他如何决定使用球坐标来生成视角有很大关系。他的方法很有趣,但请记住,您可以想出自己的方法!

// Direction : Spherical coordinates to Cartesian coordinates conversion
glm::vec3 direction(
cos(verticalAngle) * sin(horizontalAngle),
sin(verticalAngle),
cos(verticalAngle) * cos(horizontalAngle)
);

这看起来与您查找的公式不同的原因是因为它是相同的想法,但转换为不同的空间。作者只是希望当verticalAngle == 0 &&horizo​​ntalAngle == 0

时相机视角是“正前方”

你自己解决吧!

x = cos(0) * sin(0) = 0
y = sin(0) = 0
z = cos(0) * cos(0) = 1

因此,在这种情况下,相机的“外观”矢量直接指向 z 轴,在典型的 OpenGL 应用程序中,通常被认为是笔直向前的(即:Y 轴是通常是上下)。

尝试计算不同的角度,看看这会让相机看起来如何矢量旋转。

在第二种情况下,作者对公式进行了一些自由修改,并以仅在第一人称游戏/应用程序中有用的方式定义了它。在某些 3D 情况下,相机可以以不同的方式定向(例如,飞行模拟器)。不管怎样,它仍然是同样的想法。作者只是根据自己的需要调整球坐标。

就我个人而言,我更喜欢使用欧拉角来确定相机角度。设置起来需要做更多的工作(您需要做一些矩阵数学),但这是解决同一问题的不同方法。但在超出典型 FPS 游戏范围的情况下,这可能更有用。

关于OpenGL相机/方向矢量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23574320/

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