【发布时间】:2021-12-05 02:52:26
【问题描述】:
我目前正在使用一系列三角形条带绘制网格。我正在使用它来渲染一个高度场,并在顶点着色器中完全生成顶点数据,而无需任何输入缓冲区,只使用顶点和实例索引。这一切都很好,而且非常有效。
但是,我现在发现自己也需要在这个网格上实现边界线。这里明显的解决方案是行进广场之类的。基本上,我想要实现的是这样的:
黑点表示网格中属于某个集合的顶点,我想对红线内的区域进行不同的着色。
天真,这似乎很容易:向顶点添加一个值,对于集合中的顶点为 1,对于集合外的顶点为 0,并根据插值高于或低于 0.5 进行不同的渲染,例如实例。
但是,因为这是呈现为三角形条带,所以这并不完全有效。在实践中,由于它被渲染为三角形带,最终看起来像这样:
所以,一半的边缘可以工作,而一半的边缘最终会变成丑陋的方形楼梯。
我这几天一直在琢磨我的大脑,是否有一些技巧可以用来生成不同的顶点值,或者进行比 >0.5 更复杂的测试,以在不放弃的情况下更接近预期的形状漂亮而简单的三角形条带必须提前实际生成几何图形,但我想不出一个。
有没有人处理过类似的问题?我是否缺少一些聪明的解决方案?
我在 Metal 中执行此操作,但我不希望这在很大程度上取决于所使用的特定 API。
【问题讨论】:
-
"我想要达到的目标是这样的" 什么算法可以从点域中生成这样的东西?具体来说,最后的长线没有任何意义。中间没有点来支撑这么长的线。
-
行军广场,正如我在帖子中提到的,会做到这一点。
-
然后...使用该算法。你是说你在使用那个算法却没有得到正确的结果?
-
问题是有没有办法在保留当前基于三角条的渲染方式的同时,模拟行进方格的结果,其他原因非常有用。
-
@NicolBolas:我不认为 OP 试图画线。 OP“希望对 ... 线内的区域进行不同于其外部的阴影”。因此,大概这些线条只是阴影区域内部和外部之间边界的图示。
标签: opengl 3d gpu metal gl-triangle-strip