13

我一直在研究一种算法,它采用网格,用它做一些花哨的事情,并产生一些输出。

为了可视化结果,我决定生成一个网格副本,以一种与生成的输出相关的智能方式对其进行着色,然后使用 Meshlab 将其可视化。但是,我需要对网格的某些边缘进行与其他边缘不同的着色。

谷歌搜索了几个小时后,我还没有找到一种方法来做到这一点,即使文件格式(.obj、.ply ...)似乎支持这种行为,正如 本教程(我遵循的)所建议的那样生成输出网格)。

我已经制作了一个解决方法,也就是说,我为每个顶点分配与之相邻的一个边缘的颜色,然后我只是根据顶点颜色为边缘着色,但不幸的是,这意味着(例如)具有两种不同颜色的边缘将使用从一种颜色到另一种颜色的渐变进行渲染,这不是预期的行为。

我在这里做错了吗?(就像忽略一些明显的选项)。或者,是否有另一种渲染网格的方法可以让一个人为边缘着色(这并不意味着编码自己的渲染器或花费 3 天时间通过搅拌机的手册寻找正确的组合键)?

任何帮助都会非常受欢迎。提前致谢。

4

2 回答 2

7

我想出了一个技巧,主要是让我完成了工作。

如下:取原始网格,并为每条边创建一个新点,该点正好是该边的中点。将两个边缘顶点连接到该中点以形成一个零面积退化三角形。添加这个三角形,并将这个点添加到网格文件。你猜对了,用边缘颜色为这个新顶点着色。

一旦您调整了 meshlab 的背景颜色设置,您将能够很好地看到边缘彩色网格。

(我仍然想知道的一件事是如何增加线条的粗细,使它看起来更清晰。现在,你可以去顶点视图,看到新点都很好地被边缘颜色点亮)

于 2017-09-15T03:49:42.207 回答
4

正如 OP 所提到的,MeshLab 提供了使用自定义用户选择的颜色(所有边缘的颜色相同)或顶点/面颜色(连接到具有不同颜色的顶点的边缘将具有渐变颜色)为边缘着色的规定。可以通过启用Wireframe渲染并从选项中选择边缘颜色来完成。

在此处输入图像描述


但是,MeshLab 不支持渲染具有特定边缘颜色属性的边缘。我可能错了,但是流行的简单网格格式,例如obj并且off没有存储边缘属性(颜色,厚度等)的规定。我的印象ply也不支持这一点,但OP提供的链接另有说明。

我能想到的唯一解决方案是编写您的 OpenGL 渲染器来绘制线条而不是三角形。在编写网格时,为每条边编写顶点,并为其分配边颜色,即,如果您有 3 条边连接到一个顶点,则该顶点将重复三次。

于 2017-09-14T05:58:36.573 回答