我有 3 个 vector ,右上和前代表一个方向。
我需要将它们转换为 XYZ 角度(3 个浮点),以便我可以与 glRotatef() 一起使用
请帮忙
[编辑]
它没有正确渲染。你能看看这里是否有什么明目张胆的事情吗:pastebin.com/f6683492d
最佳答案
我假设你的意思是“向上、向右和向前”,因为向下与向上相反,并且实际上不会提供任何新信息。
您的问题不是很清楚,但我认为您的意思是您想要创建一个到新坐标基的转换,该坐标基由您描述的 vector 定义。如果这些 vector 是正交的(它们之间有 90 度),那么您不需要计算角度和使用 glRotate() 的所有麻烦。相反,您可以直接使用新基数的 vector 作为转换。
假设您拥有的 vector 是 A(a1,a2,a3) - 向上,B(b1,b2,b3) - 向右,C(c1,c2,c3) - 向前。 首先,如果它们不完全正交,您需要确保它们变得正交,可能需要一些叉积。其次,您需要确保它们的长度为1。现在创建以下矩阵:
a1 b1 c1 0
a2 b2 c2 0
a3 b3 c3 0
0 0 0 1
这是旋转矩阵,它将把你从单位基数带到由 A,B,C 定义的基数 有了这个矩阵,您需要做的就是使用 glMultMatrix() 就完成了。 如果第一次尝试不起作用,转置矩阵可能会修复它。
编辑再次检查后,矩阵的正确顺序应如下所示: 对于 vector A(ax,ay,az), B(bx,by,bz), C(cx,cy,cz)
ax ay az 0
bx by bz 0
cx cy cz 0
0 0 0 1
这是上述答案的转置。 另外,我建议您首先尝试看看它是否可以在没有翻译的情况下工作。 然后您可以通过简单地将其添加到矩阵中来添加翻译,如下所示:
ax ay az 0
bx by bz 0
cx cy cz 0
pos.x pos.y pos.z 1
关于java - 3d vector 的全局角度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1505417/