繁体   English   中英

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

[英]How to render 3D axes given pitch, roll, and yaw?

除了使用简单的2D线外,我尝试呈现如下所示的简单轴显示。

轴

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

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

在给定角度的情况下,如何正确渲染一组旋转的轴? 我不在乎z索引(因此,如果有时线条不正确地显示在彼此的顶部,那么只要它们指向正确的方向就可以了)。

我尝试过的

我知道所有线条的起点都将位于轴的中心,我们将说中心位于(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很好。 任何帮助,将不胜感激。

首先,您需要就轮换顺序达成一致。 在下文中,我假设顺序为x,y,z(俯仰,偏航,横滚)。

端点只是相应旋转矩阵的列向量。 然后,您需要将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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM