在 3D 网格中生成圆边和角的算法

标签 algorithm 3d rounded-corners mesh

从 3D 网格开始,您将如何为该网格的多边形之间的边角赋予圆形外观?


不想阻止其他方法,以下是我目前处理问题的方式:

鉴于正多面体的网格,我可以通过沿其平面缩放每个多边形并使用圆柱段连接边缘,使每个圆柱与与该多边形相交的每个多边形相切,从而使网格的边缘呈现圆形外观。

这是一个涉及立方体的示例:

Cube

这是缩放多边形后的立方体:

Cube after scaling polygons

这是使用圆柱体连接多边形边缘后的立方体:

Cube with rounded edges

我遇到的问题是弄清楚如何处理多边形之间的拐角,尤其是在每个拐角处有超过三个边相交的情况下。我还想要一种适用于所有闭合多面体的算法,而不仅仅是那些规则的多面体。

最佳答案

我将此作为答案发布,因为我无法将图片放入评论中。

饱和点

这是一张两兄弟露营的照片:

sattlepoint

他们将简单的帐篷并排放置在陡峭的峡谷中间(这是一个不适合搭帐篷的地方,但这不是重点),因此每个帐篷的一端都朝上。在四个正方形相交的地方,你有一个 sattle point。每个帐篷顶部的两个边缘以及两个向下的边缘都可以正常倒圆角。但是在饱和点,你在两个方向上都有不同的曲率,因此不可能使用球体。这排除了 Svante 的解决方案。

自相交

下图显示了一些从侧面看的 3D 多边形。这是一些锋利的东西,从另一边钻了一个洞。左图显示之前,右图显示四舍五入后。

alt text .

从锋利边缘移除的质量包含钻孔的末端。

这里还有别的东西要看。钻孔的侧面可能是非常大的多边形(假设它不是孔而是狭缝)。你仍然只能在顶部获得小半径。您不能只缩放多边形,还必须考虑相邻的多边形。

凸性

你说你只是在去除质量,这只有在你的几何形状是凸的时候才是正确的。看你发的图。但现在假设观众体积内。半径远离您,因此增加了质量。

NURBS

我自己并不是 nurbs 专家。但是约束看起来像这样: nurbs 面片的角必须与按比例缩小的多边形的角位于同一位置。拐角处的 nurb 曲面的法向量必须等于多边形的法向量。这应该足以保证 nurb 边缘将是跟随多边形边缘的直线。法线还确保在多边形和 nurbs 面片之间的边界处不会产生可见边缘。

我自己算一下。 nurbs 只是多边形。你会有一些未知的系数和你的约束。这为您提供了一个可以求解的方程组(通常是线性方程组)。

关于在 3D 网格中生成圆边和角的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3484497/

相关文章:

python - 测试点是否在某个矩形中

algorithm - 大 O - O(N^2) 或 O(N^2 + 1)?

java - 从 BufferedImage 创建 JOGL 纹理

algorithm - 是否存在仅通过每种颜色一次的路径?

linux - 在 Linux 上估算任​​务的 WCET

c++ - DirectX - CreateDeviceAndSwapChain 返回 E_INVALIDARG

graphics - 将 3d 球体投影到屏幕上的 2d 圆中

cross-browser - 跨浏览器圆角(无图像)

jquery - Primefaces 数据表 - 圆 Angular - 如何?

android - Progressbar 中的圆形进度条 - Android