gpt4 book ai didi

c++ - 将多边形从 3d 空间展开到 2d 空间(使用三角形)以获得纹理坐标

转载 作者:太空宇宙 更新时间:2023-11-04 14:24:52 25 4
gpt4 key购买 nike

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

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

//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 空间,以便它保持其所有属性(比如从倾斜 View 到表面的垂直 View )任何帮助将不胜感激。

最佳答案

我会将顶点视为 vector 。

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

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

另一种方法是将三角形本身视为二维平面,然后将 vector 从局部空间转换为世界空间的二维平面。

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

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

关于c++ - 将多边形从 3d 空间展开到 2d 空间(使用三角形)以获得纹理坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4845175/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com