java - 3d vector 的全局角度

标签 java math opengl vector angle

我有 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/

相关文章:

algorithm - 找到分数在费里序列中的位置

c++ - GLSL:链接后没有事件制服/属性

opengl - 从三角形创建圆圈还是使用片段着色器绘制它们更快?

math - 数学知识在哪些编程领域有帮助?

java - 了解正则表达式输出

java - 双向链表,在Java中的给定节点之前插入

java - 小程序因安全设置而被阻止

c++ - 计算一点到另一点的距离

opengl - openGL 中的初学者透明度/不透明

Java 类方法不会在使用 Eclipse Pydev 的 Jython 中自动完成