gpt4 book ai didi

c++ - 给定方向的 OpenGL 旋转

转载 作者:太空狗 更新时间:2023-10-29 20:17:16 25 4
gpt4 key购买 nike

我正在考虑一种在 opengl 中定义旋转的简单方法。我了解绕任何给定轴旋转一定量是如何工作的。我也知道我可以依次围绕每个轴旋转。但所有这些并不能真正解决我的问题。我想做的是旋转一个物体,使其看起来在某个(给定的)方向。因此我已经知道一堆旋转的结果....我怎样才能直接到达那里?我能否以某种方式为任何对象定义一个 lookAt 方向?

最佳答案

您不必为此使用 glRotate。你已经发现你知道一些东西,目标方向。但是目标方向并不是一切,您仍然可以围绕目标轴旋转对象,因此您还需要一个向上 vector 。

这是对象的局部 Z 轴(或您可以指定为“向前”的任何其他矩阵)。您可以规范化此 vector 并将其放入对象变换矩阵的 Z 列。

向上 vector 必须垂直于目标轴。要么你有一个,要么你从假设中推导出一个,即对象的向上 vector 应该至少向上,即有一个 Y 分量。您可以得到一个向上并垂直于目标轴的 vector ,方法是将 vector 与目标轴的标量积减去目标轴,目标轴 vector 按标量积缩放,然后归一化。比方说,Y 起来了:

U = normalize( T - T · Y )

最后你需要第三个局部轴 L。你可以通过 U 和 T 的叉积得到它,即

L = U × T

根据这些你构建了一个矩阵

Lx  Ux  Tx  0
Ly Uy Ty 0
Lz Uz Tz 0
0 0 0 1

并使用 glMultMatrix(固定函数)将其传递给 OpenGL,或者将其乘以您自己的托管堆栈并使用 glUniformMatrix(着色器)提供它。

请注意,glMultMatrix 按以下顺序索引矩阵元素

0 4 8 c
1 5 9 d
2 6 a e
3 7 b f

关于c++ - 给定方向的 OpenGL 旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6992541/

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