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