1

在我的程序中,我需要绘制一个与来自中心的线垂直的矩形。

为了在 3D 空间中以这种方式定位矩形,我使用了gluLookAt给它外观点并绘制了矩形图形。这对我来说是正确的。

为了绘制矩形(在我的框架中,在后面使用 openGL),我现在使用一个矩形类并用 3D 扩展它Node(其中节点是有一个lookAt点的东西)。给定宽度、高度和顶部顶点,绘制矩形(节点位于左上顶点并使用lookAt 定位矩形)。

Node还有一个getPosition()函数可以给我它的 3D 位置(矩形左上角 - 比如说 300,400,20)。我正在尝试获取其他三个顶点在 3D 空间中的位置以用于我的操作。由于矩形是在 3D 空间中定向的,其他三个顶点不能仅仅通过添加宽度和高度来获取。使用 3D 方向的矩形,我如何获得其他三个顶点的位置?

4

2 回答 2

1

最小坐标量略小于 9:这是 3d 空间中通用矩形的三个顶点(Ax、Ay、Az、Bx、By、Bz、Cx、Cy、Cz)。

最后一个是例如D=A+(BA)+(CA)=B+CA。

为什么它稍微少一点,因为 A、B、C 坐标的任何三元组不一定形成 90 度角——但追求简单的可能排列并准备计算叉积确实没有多大意义或标准化向量。

 A----B
 |    |
 C---(D)

编辑:矢量算术初级:

要添加/减去向量,需要对元素求和。A=B+C 表示(ax=bx+cx;ay=by+cy;az=bz+cz)。

(任何维度)中的点积是项的乘积之和:dot(A,B) = ax*bx + ay*by + az*bz;// 对于 2,3,4,任意数量的元素/维度。

叉积是一种特殊的算子,至少在 2 维和 3 维中定义良好。叉积的几何解释之一是它产生一个垂直于其参数的两个向量的向量。

如果A是向量(ax,ay,az),也表示从原点O=(0,0,0)的方向向量即A = AO = (ax-0,ay-0,az-0);同样 (BA) 是从 A 到 B 的 [direction] 向量(有时写为 AB(顶部带有箭头 -->))

可以“添加”这些有向向量,例如:

    o----->
           \
            \
      <------o
     /
    /
   x

因此,如果将向量 A+(BA) + (CA) 相加,则将结束于点 D。

于 2013-01-02T11:30:17.547 回答
0

您可以使用矩形的法线检索其他 3 个点的位置。为了在空间中定位一个矩形,您需要 2 个信息:

  • 它的位置,通常表示为 3 或 4 分量向量,或 4x4 矩阵;
  • 它的方向,通常表示为四元数。

如果你用法线表示方向,并且只有一个点,你就不能推断出其他点(因为你需要其他信息来求解围绕法线的旋转方程)。我认为最好的想法是使用四元数来定位空间中的事物(您仍然可以从中检索法线),但您也可以使用矩形中的法线 + 一个向量。你说你只有一个点和一个元组(宽度,高度),所以基于×操作的常用方法无法通过。

我建议你:

  • 使您的Node班级成为正确处理方向的班级;lookAt不是为那项工作而设计的;
  • 将平移矩阵(位置)与四元数(方向)中的转换矩阵相结合,以正确处理位置和方向;
  • 使用该矩阵来提取一个旋转向量,您将使用它rotated × normal来获得 3 个点。
于 2013-01-02T12:36:09.657 回答