生成复杂(非凸)的多面体UV映射

3
我需要找到一种方法来生成非凸多面体的纹理贴图,而不使用设计工具。具体来说,我将模拟结果数据映射到3D表面上。也就是说,在代码中(最好是C#或VB,因为我的目标是WPF 3D)。
一种常用的方法是使用GradientBrush仅映射颜色(如这里的问题中所述),但如果多面体中的平面非常狭窄或映射的 (u,v) 坐标在同一个平面上相距很远,则图像会变得嘈杂。
有C#/.NET库(商业或其他)可用于此吗?在我的研究中,我遇到了“Atlas Unwrapping”这个术语,其描述听起来就像我需要的。
如果没有预先编写的库,哪些文章或书籍会包含算法描述?
(我对3D图形和纹理映射的基础知识很熟悉,因此不需要提供基础教程。如果您想在评论中留下类似的链接,随便做吧。)
3个回答

1

这是一个指导我去查找论文和算法的答案。它们看起来都超出了中级程序员的水平,而且没有一个容易实现。但到目前为止,其他两个回答并不是针对具体问题的答案。赏金在此处颁发。 - Rob Perkins

1
如果网格足够对称,您可以尝试将顶点坐标转换为绕网格轴的圆柱空间,并将角度用作纹理坐标(红色)。第二个坐标(蓝色/青色)将是从零平面到表面的距离。我会选择与网格中心相交的平面,然后您应该翻译/缩放纹理坐标,使其符合渲染引擎的规格。这种方法的缺点是圆柱极点周围的畸变,优点是凸性不重要。

cylindric style mesh texturing


这是一个不错的算法,但它并不是地图集映射。想象一下一个美国加仑牛奶瓶的三角形网格。你不能对它做圆柱展开。 - Rob Perkins
我不知道那个瓶子长什么样子,但是除非你的网格很复杂有洞,否则这应该可以工作。问题只在于纹理被扭曲了多少空间。顺便说一下,你没有指定你的网格形状和映射目的(你知道纹理还是从体素地图创建纹理...)。 - Spektre
http://1.bp.blogspot.com/-ibh3grqOdmY/TVYFgW-B5NI/AAAAAAAAB-A/hey3kisJsNc/s1600/Feb+9+2011+040.jpg这是一个美国加仑的牛奶容器的图片。谷歌本可以帮到你的。 - Rob Perkins
Yeap 包含孔洞,这种方法不适用于它。不幸的是,我不确定是否有自动化的方法来对具有孔洞的通用复杂网格进行统一表面映射。也许可以通过一些表面泛洪填充直到所有表面都被覆盖或填充结束(然后未覆盖的部分必须作为下一个纹理 - 网格划分来完成),但编写代码可能会成为噩梦。 - Spektre

0

考虑使用CGAL库。它有许多用于三维数学的工具。我在我的硕士论文中使用过它,但已经很久没有使用了。

http://www.cgal.org/


它具有许多用于3D几何的功能,大多数使用受GPL限制(这并不是致命问题!)但是,CGAL的哪些部分包含图集映射算法? - Rob Perkins
它具有非凸多面体生成和三角剖分功能。我认为这可能会有所帮助。 - The Quantum Physicist
我们从一个预先生成的、已经三角化的非凸多面体开始。这可能有所帮助,但库非常大... - Rob Perkins

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接