如何在俯仰,滚转和偏航的情况下渲染3D轴?

时间:2015-08-21 02:12:18

标签: c math matrix 3d rotation

我正在尝试渲染一个简单的轴显示,如下所示,除了使用简单的2D线。

axes

我有轴应显示的俯仰,偏航和滚动的角度值。 (例如PI / 2,PI / 4,PI * 3/2)

我有一个函数可以在2D空间中渲染给定起点和终点的2D线。

如何根据角度正确渲染一组旋转的轴?我不关心z-indexing(所以如果有时线条错误地显示在彼此之上,只要它们指向正确的方向就可以了。)

我尝试了什么

我知道所有线条的起点都在轴的中心,我们会说中心位于(0,0),轴的长度为100。计算3个轴中每个轴的端点。

我已将X轴定义为从左到右,Y轴为上下,Z轴为后退(即在屏幕外)。

螺距围绕X轴旋转,滚动绕Z轴旋转,偏航绕Y轴旋转。

要计算我完成的X轴终点:

x = cos(roll) * cos(yaw) * 100;
y = sin(-roll) * 100;

要计算Y轴终点,我已经完成了:

x = cos(roll + PI/2) * 100;
y = sin(-roll - PI/2) * sin(PI/2 - pitch) * 100;

要计算我完成的Z轴终点:

x = cos(PI/2 - yaw) * 100;
y = sin(PI - pitch) * 100;

很明显,我真的不知道自己在做什么。当我应该使用像矩阵这样更先进的东西时,我觉得我采取了一种非常天真的方法。如果它有所作为,我使用的是C,但是psuedocode很好。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

首先,你需要就轮换的顺序达成一致。在下文中,我假设x,y,z(音高,偏航,滚动)的顺序。

端点只是相应rotation matrix的列向量。然后,您需要将3d点投影到2d屏幕上。看起来好像使用了简单的正交投影(去除z坐标)。所以结果如下:

x1 = 100 (cos yaw * cos roll)
y1 = 100 (cos pitch * sin roll + cos roll * sin pitch * sin yaw)

x2 = 100 (-cos yaw * sin roll)
y2 = 100 (cos pitch * cos roll - sin pitch * sin yaw * sin roll)

x3 = 100 (sin yaw)
y3 = 100 (-cos yaw * sin pitch)