在 meshlab 中着色网格边缘
Coloring mesh edges in meshlab
我一直在研究一种算法,该算法采用网格,用它做一些奇特的事情,并产生一些输出。
为了可视化结果,我决定制作一个网格副本,以与生成的输出相关的智能方式为其着色,并使用 Meshlab 对其进行可视化。但是,我需要对网格边缘的 一些 进行不同的着色。
谷歌搜索了几个小时后,我一直没能找到一种方法来做到这一点,即使文件格式(.obj、.ply ...)似乎支持这种行为,如
this tutorial(我按照它来生成输出网格)。
我已经制定了一个解决方法,即为每个顶点分配与其相邻的一条边的颜色,然后我只根据顶点颜色为边着色,但不幸的是,这意味着(例如)两种不同颜色的边缘将使用从一种颜色到另一种颜色的渐变进行渲染,这不是预期的行为。
我是不是做错了什么? (就像忽略一些显而易见的选项)。或者,是否有另一种渲染网格的方法可以让人们对边缘进行着色(这并不意味着编写自己的渲染器或花费 3 天时间通过搅拌机手册寻找正确的组合键)?
非常欢迎任何帮助。提前致谢。
正如 OP 所提到的,MeshLab 提供了使用自定义用户选择的颜色(所有边的颜色相同)或 vertex/face 颜色(连接到具有不同颜色的顶点的边将具有渐变颜色)的颜色边缘).可以通过启用 Wireframe
渲染并从选项中选择边缘颜色来完成。
但是,MeshLab 不支持渲染具有特定边缘颜色属性的边缘。我可能是错的,但流行的简单网格格式如 obj
和 off
没有规定存储边缘属性(颜色、厚度等)。我的印象是 ply
也不支持这个,但是 OP 提供的 link 另有说明。
我能想到的唯一解决方案是编写 OpenGL 渲染器来绘制线条而不是三角形。在编写网格时,为每条边编写顶点,并为其分配边颜色,即如果您有 3 条边连接到一个顶点,则该顶点将重复三次。
我想出了一个 hack,主要是让我完成了工作。
这里开始:获取原始网格,并为每条边创建一个新点,该点恰好是该边的中点。将两个边顶点连接到该中点以形成零面积退化三角形。将这个三角形和这个点添加到网格文件中。你猜对了,用边颜色给这个新顶点上色。
一旦你fiddle设置了meshlab的背景色,你就能很好地看到边缘彩色网格。
(我仍在尝试找出的一件事是如何增加线条的粗细,使其看起来更清晰。现在,您可以转到顶点视图,然后看到新点全部亮起边缘颜色很好)
我一直在研究一种算法,该算法采用网格,用它做一些奇特的事情,并产生一些输出。
为了可视化结果,我决定制作一个网格副本,以与生成的输出相关的智能方式为其着色,并使用 Meshlab 对其进行可视化。但是,我需要对网格边缘的 一些 进行不同的着色。
谷歌搜索了几个小时后,我一直没能找到一种方法来做到这一点,即使文件格式(.obj、.ply ...)似乎支持这种行为,如 this tutorial(我按照它来生成输出网格)。
我已经制定了一个解决方法,即为每个顶点分配与其相邻的一条边的颜色,然后我只根据顶点颜色为边着色,但不幸的是,这意味着(例如)两种不同颜色的边缘将使用从一种颜色到另一种颜色的渐变进行渲染,这不是预期的行为。
我是不是做错了什么? (就像忽略一些显而易见的选项)。或者,是否有另一种渲染网格的方法可以让人们对边缘进行着色(这并不意味着编写自己的渲染器或花费 3 天时间通过搅拌机手册寻找正确的组合键)?
非常欢迎任何帮助。提前致谢。
正如 OP 所提到的,MeshLab 提供了使用自定义用户选择的颜色(所有边的颜色相同)或 vertex/face 颜色(连接到具有不同颜色的顶点的边将具有渐变颜色)的颜色边缘).可以通过启用 Wireframe
渲染并从选项中选择边缘颜色来完成。
但是,MeshLab 不支持渲染具有特定边缘颜色属性的边缘。我可能是错的,但流行的简单网格格式如 obj
和 off
没有规定存储边缘属性(颜色、厚度等)。我的印象是 ply
也不支持这个,但是 OP 提供的 link 另有说明。
我能想到的唯一解决方案是编写 OpenGL 渲染器来绘制线条而不是三角形。在编写网格时,为每条边编写顶点,并为其分配边颜色,即如果您有 3 条边连接到一个顶点,则该顶点将重复三次。
我想出了一个 hack,主要是让我完成了工作。
这里开始:获取原始网格,并为每条边创建一个新点,该点恰好是该边的中点。将两个边顶点连接到该中点以形成零面积退化三角形。将这个三角形和这个点添加到网格文件中。你猜对了,用边颜色给这个新顶点上色。
一旦你fiddle设置了meshlab的背景色,你就能很好地看到边缘彩色网格。
(我仍在尝试找出的一件事是如何增加线条的粗细,使其看起来更清晰。现在,您可以转到顶点视图,然后看到新点全部亮起边缘颜色很好)