我正在尝试渲染一个简单的轴显示,如下所示,除了使用简单的2D线。
我有轴应显示的俯仰,偏航和滚动的角度值。 (例如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很好。任何帮助将不胜感激。
答案 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)