我有3D对象,表示为numpy数组。
如何展开此类对象的“表面”以获得值的2D映射(我不在乎内部值)?
它类似于展开地球仪的表面,但形状因情况而异。
最佳答案
这是一个顶点问题。模型上的每个三角形都是可以映射到2D平面的平面。因此,没有任何假定结构的最幼稚的解决方案是:
for triangle in mesh:
// project to plane defined by normal to avoid stretching
这种解决方案并不理想,因为它会将所有uv放在彼此的顶部。下一步将散布三角形以填充一定的空间。这是布局阶段,用于定义如何在2D空间中对顶点进行布局。
通常,理想的是将UV放置在一个单位平方内。这允许从单个图像轻松进行UV映射。
选项:2
用已知的2D映射形状围绕对象,然后根据其法线将每个三角形投影到该形状上。这提供了在结构化的庄园中展开uv的机制。一个示例对象将是投影到多维数据集上。
选项:3
查阅学术论文和像Blender这样的开源库/工具:
https://wiki.blender.org/index.php/Doc:2.4/Manual/Textures/Mapping/UV/Unwrapping
blender使用上述方法解开任意几何图形。如搅拌器展开页面所述,还有其他方法可以完成此操作。 Blender的好处是您可以参考源代码来实现uv unwrap方法。
希望这会有所帮助。
关于python - 如何将3D对象表面平坦化为2D阵列?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43403779/