我有一个程序,可以在 3D 空间中绘制一些形状,例如矩形/圆形/三角形等,与中心等距。
距中心等距的两个点的示例(0,0,0)
为
x1: 93, 313, 123
x2: -263, -135, -186
并且可能还有更多点。
在这两点上,我通过类似的方式绘制形状
glRectangle(x1, 宽度, 高度);
形状(矩形/三角形等)在距中心等距的起始顶点(x1或x2)
处表现得非常好。然而,这些形状在空间中的方向与我正在寻找的方向错误。
我希望形状所在平面的中心垂直于来自中心的假想线。这可能可以通过旋转飞机来解决,但我不确定采用的方法。对于当前的示例,假设我有形状的顶点,但如何找出矩形所在的平面并旋转该平面
以使其垂直(到来自空间中心的线(0,0,0)
)
最佳答案
如果中心需要垂直于 vector 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是辅助 vector ,是矩形上局部的上下方向,归一化后可以用来计算矩形的4个点。 另外要小心,如果没有显示矩形,它可能与绘制顺序有关,所以只需颠倒顺序,然后如果正面和背面错误......
关于c++ - 设置 3d 空间中对象的方向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13950819/