c++ - 设置 3d 空间中对象的方向

标签 c++ algorithm opengl 3d

我有一个程序,可以在 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/

相关文章:

C++ 维度分析(Barnes 和 Nackman)与 Scale

c++ - 小数因子的缩减数组

algorithm - 找到给定根的多项式的系数

algorithm - 一组给定操作的最佳数据结构 - 添加、检索最小值/最大值和检索特定对象

OpenGL super 采样抗锯齿?

Java OpenGL窗口一打开就关闭

c++ - while 循环时的问题

c++ - 使用不同的构造函数重新分配对象

python - 在defaultdict中把一个元素放在正确的位置

opengl - GLSL phong 着色器的奇怪镜面反射结果