1

所以我在 Ogre3D 中创建了一个模型,这个模型由许多任意旋转和位置的三角形组成。我想像许多建模程序一样“展开”模型,以便所有三角形都映射到 2d (x,y) 但三角形大小保持不变。这是用于应用贴花。必须保持三角形大小的原因,以便在应用纹理时不会有任何拉伸。

这是我正在考虑的方向,但我无法将其可视化并实现正确的算法:

//Verticies will have a converted bool;

func( triangle x):
     for each of x's vertices:
           map to x,y coordinates if not converted;
           check other triangles for common vertex if so call func(common_tri);

一旦返回,将有所有三角形的转换版本,以便它们全部展开并放置在纹理上,我遇到的问题是映射到 x,y 空间。我不确定如何将 3d 空间中的三角形转换为 2d 空间,以便它保持其所有属性(例如从倾斜视图到表面的垂直视图)任何帮助将不胜感激。

4

1 回答 1

0

我会将顶点视为向量。

因此,您可以对每个向量进行归一化,然后删除 Z 坐标,然后再次应用乘法。即 tri = vec1,vec2,vec3, vec1Length = vec1.getLength() newVec1 = vec1.normalize() * vec1Length

因为这将保留向量的大小,但将它们映射到 2d 平面。(或者应该,我不是 100% 这在数学上是正确的。)

您可以这样做的另一种方法是将三角形本身视为 2d 平面,然后将向量从该局部空间转换到世界空间的 2d 平面。

例如,世界原点是 (0,0,0)

三角形本身是由三个点定义的平面,您使用一个向量作为 X 坐标,找到一个垂直于该向量的向量,然后定义 y 坐标。您还可以通过 X 叉积 Y 定义 Z,这将为您提供与世界原点的“偏移”,然后您可以将它们映射回由世界原点的 X、Y 向量表示的 2d 平面(即(1 ,0) 和 (0,1))。在许多基本的计算机图形书籍中应该有数学来做到这一点。

于 2011-02-08T22:39:04.803 回答