全景角度的3d矢量

2 java opengl math vector angle

我有3个向量,向右和向前表示方向.

我需要将它们转换为XYZ角度(3个浮点数)所以我可以使用glRotatef()

请帮忙

[编辑]

它没有正确呈现.你能看到这里有什么明显的东西:pastebin.com/f6683492d

sho*_*osh 6

我认为你的意思是"向上,向右和向前",因为向下是与向上相反,并不依赖于任何新信息.
你的问题不是很清楚,但我认为你的意思是你要创建一个由你描述的向量定义的新坐标基础的转换.如果这些向量是正交的(它们之间有90度),那么你不需要经历所有计算角度和使用glRotate()的麻烦.相反,您可以直接使用新基数的向量作为转换.

假设您拥有的向量是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
Run Code Online (Sandbox Code Playgroud)

这是旋转矩阵,它将您从单位基地带到由A,B,C定义的基础.使用此矩阵,您需要做的就是使用glMultMatrix()并完成.如果第一次尝试不起作用,转置矩阵可能会解决它.


编辑再次检查后,矩阵的正确顺序应如下:对于向量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
Run Code Online (Sandbox Code Playgroud)

这是上述答案的转置.此外,我建议您首先尝试查看它是否有效而无需翻译.然后你可以通过简单地将它添加到矩阵来添加翻译,如下所示:

ax     ay     az     0
bx     by     bz     0
cx     cy     cz     0
pos.x  pos.y  pos.z  1
Run Code Online (Sandbox Code Playgroud)