Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 如何在3D场景中指定矩形?_Algorithm_3d - Fatal编程技术网

Algorithm 如何在3D场景中指定矩形?

Algorithm 如何在3D场景中指定矩形?,algorithm,3d,Algorithm,3d,当然,在渲染三维矩形(即三维空间中的矩形)时,它们被指定为两个三角形的顶点列表。然而,该表示包含大量无关信息,需要多次编写代码,这让人感到厌烦。我想创建一个“矩形”对象,允许我指定其纹理、大小、位置和空间方向,并导出顶点(和索引)列表,但我不确定最好的方法。我应该指定左下角的位置(预旋转)还是矩形的中心?如何将方向指定为包含旋转角度的向量?这是一个如此简单和标准的要求,我相信人们以前已经考虑过了,但我在这个网站或其他地方找不到任何关于这个主题的东西。我计划经常使用这些对象,所以我的主要目标(除了

当然,在渲染三维矩形(即三维空间中的矩形)时,它们被指定为两个三角形的顶点列表。然而,该表示包含大量无关信息,需要多次编写代码,这让人感到厌烦。我想创建一个“矩形”对象,允许我指定其纹理、大小、位置和空间方向,并导出顶点(和索引)列表,但我不确定最好的方法。我应该指定左下角的位置(预旋转)还是矩形的中心?如何将方向指定为包含旋转角度的向量?这是一个如此简单和标准的要求,我相信人们以前已经考虑过了,但我在这个网站或其他地方找不到任何关于这个主题的东西。我计划经常使用这些对象,所以我的主要目标(除了性能)是易于使用,而不是与内部表示有关。对我来说,简单地编写我能想到的第一件事并不难,但我不想错过任何东西,让它变得不必要的困难

那么,我应该如何表示一个矩形对象呢?意见是受欢迎的,但消息来源将特别有用


编辑:如果有帮助的话,我相信我会主要使用立方体面上的矩形,尽管不一定是这些立方体的整个面。

因为矩形只是一个有界平面,那么把它存储为该平面的一个扩展:一个点和一个法向量(定义中心——或者可能是一个角——和方向);但是,在宽度和高度边界中再添加两个组件?

我认为这实际上取决于您打算如何使用矩形

例如:如果你有很多矩形,存储两个三角形中的一个的三个点可能是最好的,因为你只需要再计算一个点

如果您通常将矩形置于某个物体的中心,则中心点、宽度、高度和旋转角度可能更合适

我会说:从你觉得最自然的事情开始。确保您的类能够进行所有必要的计算,并将它们隐藏在访问器后面。有一套很好的测试


这样,您可以随时更改实现。或者,您甚至可以根据不同的需要使用不同的矩形实现

存储将标准、轴对齐的正方形转换为所需位置的齐次矩阵,以及确定如何将纹理映射到其上的单独矩阵可能是最简单的

对于位置矩阵,可以存储不影响
w
-坐标的4x3矩阵。这只是有点多余:它使用12个值,而一般矩形需要8个值,但另一方面,将其转换回可用于渲染的形式要容易得多

或者,您可以存储点位置(边或中心,取决于最方便的位置)和两个方向向量,描述每条边的方向和长度;您依靠矩形生成器来确保边向量是正交的。这将需要9个值,这几乎是您所能做到的最好值


对于纹理贴图,可以存储一个3x2矩阵,该矩阵定义(u,v)坐标到矩形边定义的坐标的仿射映射。您可以选择基于零的(0,1)x(0,1)映射或对称(-1,1)x(-1,1)映射,这取决于您的应用程序是否方便。在任何情况下,这都需要6个值。

听起来不错,但宽度和高度应该定义为从中心点向外延伸,还是应该定义为该点位于矩形的一角?+1用于数学计算。当你有一个坚实的数学基础时,编程就容易得多。这些值的访问器可以处理这些值与内部表示之间的转换;但是使用点作为一个角点可能会使其他三个角点的计算更加简单。你忘记了旋转。我建议将矩形的原点视为左下角(ala数学)或左上角(ala计算机图形)。然后,宽度和高度是矩形的
x
尺寸的长度和
y
尺寸的高度。对
x
y
维度
{1,0}
{0,1}
应用旋转,以围绕其原点的法向量旋转矩形。