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

时间:2011-02-09 03:04:55

标签: algorithm 3d

当渲染3D矩形(即3D空间中的矩形)时,它们被指定为两个三角形的顶点列表。但是,该表示包含许多无关的信息,这些信息对于多次编码很烦人。我想创建一个空间“矩形”对象,让我可以指定它的质地,大小,位置,方向和出口顶点(和索引)的名单,但我不知道的最好的方法做到这一点。我应该指定左下角的位置(预旋转)还是矩形的中心?我应该如何指定方向,作为包含旋转角度的矢量?这是这样一个简单和标准的要求,即我之前,请确保人都想过这个问题,但是我无法找到在这个网站上或其他地方受到什么。我计划大量使用这些对象,所以我的主要目标(除了性能)是易用性,而不是与内部表示有关。这不会是我很难简单的代码,我能想到的第一件事情,但我不想错过任何东西,使它不必要的困难。

那么,我应该如何表示一个Rectangle对象?欢迎提出意见,但消息来源会特别有用。

编辑:如果有帮助,我相信我会主要使用于立方体的表面的矩形,虽然不一定的的这些多维数据集的整个面部,

3 个答案:

答案 0 :(得分:2)

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

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

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

对于纹理贴图,您可以存储3x2矩阵,该矩阵将(u,v)坐标的仿射映射定义到由矩形边缘定义的坐标上。您可以根据应用程序的方便选择基于零的(0,1)x(0,1)映射或对称(-1,1)x(-1,1)映射。无论如何,这将需要6个值。

答案 1 :(得分:1)

由于矩形只是一个有界平面,如何将其存储为一个延伸:一个点和一个法向量(定义中心---或者可能是一个角---和方向);但是为宽度和高度边界增加了两个组件?

答案 2 :(得分:0)

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

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

如果您通常将矩形置于中心位置,则中心点,宽度,高度和旋转角度可能更合适。

我会说:从你看起来很自然的开始。确保您的班级能够进行所有必要的计算并将其隐藏在访问者后面。有一套很好的测试。

这样您就可以随时更改实施方式。或者你甚至可以根据不同的需求使用不同的矩形实现