在3d空间中设置对象的方向

时间:2012-12-19 10:57:07

标签: c++ algorithm opengl 3d

我有一个程序,我在3D空间中绘制一些形状,如矩形/圆形/三角形等,与中心等距。

与中心(0,0,0)等距的两个点的示例是

x1: 93, 313, 123
x2: -263, -135, -186

也可能有更多积分。

在这两点上,我正在通过类似

的方式绘制形状

glRectangle(x1, width, height);

形状(矩形/三角形等)在距离中心等距离的起始顶点(x1 or x2)处非常好。但是,对于我正在寻找的东西,形状在空间方向上是错误的。

我希望形状所在平面的中心垂直于来自中心的假想线。这可能可以通过飞机的旋转来解决,但我不确定采用的方法。对于当前示例,假设我有形状的顶点但是我如何计算矩形的平面和rotate that plane使其垂直(对于即将到来的线)从空间的中心(0,0,0)

1 个答案:

答案 0 :(得分:2)

如果中心需要垂直于矢量C(坐标中心和矩形中心之间的直线),它应该像这样工作(伪代码):

A = C x UP_VECTOR (CROSS-PRODUCT to calculate helper vector pointing in "sideway" direction of "rectangle")
B = C x A (CROSS-PRODUCT to get the local "up/down" vector of the "rectangle")
A = normalize(A)
B = normalize(B)
P1 = width/2 * A + height/2 * B
P2 = -width/2 * A + height/2 * B
P3 = -width/2 * A + -height/2 * B
P4 = width/2 * A + -height/2 * B

希望这是可以理解和正确的(没有尝试过,并且在找到合适的词汇时遇到了一些麻烦)

其他一些信息: A和B是辅助向量,是矩形上的局部向上和向左方向,在归一化之后,它们可以用于相应地计算矩形的4个点。 如果没有显示矩形,也要小心它可能与绘图顺序有关,所以如果正面和背面错误,只需颠倒顺序......