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

标签 algorithm 3d

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

那么,我应该如何表示一个 Rectangle 对象呢?欢迎提出意见,但资源会特别有帮助。

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

最佳答案

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

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

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

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

关于algorithm - 我应该如何在 3D 场景中指定矩形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4940909/

相关文章:

java - 3D 数组(一维平面)索引

matlab - MATLAB 中隐式函数 f(x,y,z)=0 的轮廓

python - 通过在列表中搜索字符串来查找索引

iphone - 如何在 iOS 的 Cocos2D 游戏中创建新的模型和纹理

algorithm - 用给定范围内的特定数字书写的所有数字的总和

algorithm - 以越来越小的螺旋线穿过方阵

r - scatter3d - 基于第四个变量的彩色点

java - 使用 Jbullet 进行 3D java 碰撞检测

javascript - 如何使用递归将元素插入数组中的所有位置?

string - 我有一个特定的 1's and 0' 字符串,我想在另一个字符串中找到最合适的匹配项,最大误差为 20%