如何在给定俯仰、滚动和偏航的情况下渲染 3D 轴?
How to render 3D axes given pitch, roll, and yaw?
我正在尝试渲染一个简单的轴显示,如下所示,但使用简单的二维线除外。
我有轴应该显示的俯仰、偏航和滚动的角度值。 (例如 PI/2、PI/4、PI*3/2)
我有一个函数可以在给定 2D 起点和终点的情况下渲染 2D 线 space。
如何在给定角度的情况下正确渲染一组旋转的轴?我不关心 z 索引(所以如果有时线条错误地显示在彼此之上,只要它们指向正确的方向就可以)。
我试过的
我知道所有线的起点都在轴的中心,我们会说中心在 (0, 0),轴的长度为 100。那让我计算 3 个轴中每个轴的端点。
我已经定义了X轴为从左到右,Y轴为上下,Z轴为后退(即在屏幕外)
Pitch是绕X轴旋转,Roll是绕Z轴旋转,Yaw是绕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 很好。任何帮助将不胜感激。
首先,您需要就轮换顺序达成一致。在下文中,我假设顺序为 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)
我正在尝试渲染一个简单的轴显示,如下所示,但使用简单的二维线除外。
我有轴应该显示的俯仰、偏航和滚动的角度值。 (例如 PI/2、PI/4、PI*3/2)
我有一个函数可以在给定 2D 起点和终点的情况下渲染 2D 线 space。
如何在给定角度的情况下正确渲染一组旋转的轴?我不关心 z 索引(所以如果有时线条错误地显示在彼此之上,只要它们指向正确的方向就可以)。
我试过的
我知道所有线的起点都在轴的中心,我们会说中心在 (0, 0),轴的长度为 100。那让我计算 3 个轴中每个轴的端点。
我已经定义了X轴为从左到右,Y轴为上下,Z轴为后退(即在屏幕外)
Pitch是绕X轴旋转,Roll是绕Z轴旋转,Yaw是绕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 很好。任何帮助将不胜感激。
首先,您需要就轮换顺序达成一致。在下文中,我假设顺序为 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)