gpt4 book ai didi

ios - Metal 顶点着色器扩展单个三角形

转载 作者:行者123 更新时间:2023-11-28 23:38:13 25 4
gpt4 key购买 nike

我正在开发一个 2D 绘图应用程序。我想制作线条扩展的效果,如下所示:

Expanded lines

这适用于线条像气球一样展开和弹出的动画。

线条被绘制为三角形带。我的想法是通过在顶点着色器中增大每个三角形来使它们扩展。三角形中的每个顶点都应远离其他顶点。

为此,我需要访问三角形中的其他顶点。这在 Metal 中可能吗?

vertex Vertex vertex_expand(device float2 *vertices [[buffer(0)]],
constant VertexUniforms *uniforms [[buffer(1)]],
uint vid [[vertex_id]]) {

// is vertices[vid - 1] and vertices[vid + 1] the previous and next vertices?
// is vid=0 the first vertex?

}

最佳答案

是的,您可以访问其他顶点,具体取决于您如何进行绘制。如果您进行索引绘制,则顶点 ID 和三角形之间的关系由索引缓冲区控制。但问题是,您不知道顶点着色器的给定调用所使用的索引(如果这些索引都引用同一顶点,则可能会为多个索引调用一次)。

因此,您必须避免索引绘制。

在那种情况下,是的,vertices[vid - 1]vertices[vid + 1] 是前一个和下一个顶点。

但是请注意,对于三角形带,每个顶点都是多个三角形的成员。因此,对于远离其中心的每个顶点,没有一个唯一的三角形,您可以移动该顶点以扩展它。我希望您希望两个顶点与您正在处理的 strip 的同一边缘相邻,使用它们来计算包含当前顶点的线段的法线,并沿该线移动顶点。

由于您正在制作动画,因此将重复执行此操作,因此您可能需要提前计算一次这些法线并将它们作为每个顶点数据传递。您可以使用计算着色器进行此计算,尽管在 CPU 上执行此操作可能足够快。如果您以这种方式预先计算法线,顶点着色器将不需要引用任何相邻的顶点。

关于ios - Metal 顶点着色器扩展单个三角形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54394435/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com