MTLTriangleFillModeLines会忽略退化的三角形吗?

问题描述 投票:0回答:1

所以我在应用中遇到了一种情况,我想将整个屏幕绘制成三角形网格。我正在按照您的期望进行操作。一个顶点缓冲区和一个沿着这些顶点的索引缓冲区。

在调试时,我希望看到此网格的边缘,以帮助我直观地了解正在发生的事情。这是我在这里发现这张图片的时候。这是使用[encoder setTriangleFillMode:MTLTriangleFillModeLines];和带有片段着色器输出绿色的管道绘制的。无论出于何种原因,您都可以在这里看到对角线。

enter image description here

我的问题本质上是这个。这看起来像是我的网格完全错误(可能是索引缓冲区)的情况,还是MTLTriangleFillModeLines不能很好地处理退化的三角形?

一些其他重要细节:

  • 使用drawIndexedPrimitivesMTLPrimitiveTypeTriangleStrip进行绘制
  • 我正在使用uint32_t作为索引类型
  • 索引是根据here的示例代码的旧部分确定的,因为它们还将屏幕分成了网格。

这里是Github的代码副本

unsigned int index = 0;
for (int i=0; i<poolHeight-1; i++)
{
    for (int j=0; j<poolWidth; j++)
    {
        if (i%2 == 0)
        {
            // emit extra index to create degenerate triangle
            if (j == 0)
            {
                rippleIndicies[index] = i*poolWidth+j;
                index++;                    
            }

            rippleIndicies[index] = i*poolWidth+j;
            index++;
            rippleIndicies[index] = (i+1)*poolWidth+j;
            index++;

            // emit extra index to create degenerate triangle
            if (j == (poolWidth-1))
            {
                rippleIndicies[index] = (i+1)*poolWidth+j;
                index++;                    
            }
        }
        else
        {
            // emit extra index to create degenerate triangle
            if (j == 0)
            {
                rippleIndicies[index] = (i+1)*poolWidth+j;
                index++;
            }

            rippleIndicies[index] = (i+1)*poolWidth+j;
            index++;
            rippleIndicies[index] = i*poolWidth+j;
            index++;

            // emit extra index to create degenerate triangle
            if (j == (poolWidth-1))
            {
                rippleIndicies[index] = i*poolWidth+j;
                index++;
            }
        }
    }
}
ios graphics metal
1个回答
0
投票

此处主动重启将是更好的解决方案。因此,正如[C​​0]中指出的那样,在每行的末尾放置一个原始的重新启动索引。因此,新代码应大致如下:

Metal drawIndexedPrimitives
© www.soinside.com 2019 - 2024. All rights reserved.