将多边形从3d展开到2d空间(使用三角形)展开纹理坐标

所以我在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空间中获得一个二维空间的三角形,以便它保持其所有属性(如从一个角度视图到表面的perpedicular视图)任何帮助将不胜感激。     
已邀请:
我会把顶点看作矢量。 因此,您可以对每个向量进行标准化,然后删除Z坐标,然后再次应用乘法。 即tri = vec1,vec2,vec3, vec1Length = vec1.getLength() newVec1 = vec1.normalize()* vec1Length 因为这将保留矢量的大小,但将它们映射到2d平面。 (或者它应该,我不是100%,这在数学上是正确的。) 另一种方法是将三角形本身视为二维平面,然后将矢量从局部空间转换为世界空间的二维平面。 例如,世界起源是(0,0,0) 三角形本身是由三个点定义的平面,您使用一个向量作为X坐标,找到垂直于该向量的向量,并且您定义了y坐标。你也可以定义Z×X交叉乘积Y,这将给你一个距离世界原点的“偏移”,你可以将它们映射到2d平面上,由来自世界原点的X,Y向量重新命名(即(1) ,0)和(0,1))。在许多基本的计算机图形书中应该有数学运算。     

要回复问题请先登录注册