繁体   English   中英

如何将3D对象表面平坦化为2D阵列?

[英]How to flatten 3D object surface into 2D array?

我有3D对象,表示为numpy数组。 如何展开此类对象的“表面”以获得值的二维图(我不在乎内部值)?

它类似于展开地球仪的表面,但形状因情况而异。 在此处输入图片说明

这是一个顶点问题。 模型上的每个三角形都是可以映射到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方法。

希望这会有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM