我对镶嵌技术完全陌生,对Metal API也比较新,一直在参考这个示例代码https://developer.apple.com/library/archive/samplecode/MetalBasicTessellation/Introduction/Intro.html。
我意识到iOS上的最大镶嵌因子为16,与OSX上的64相比,对于我的用例来说非常低。我想我需要在一个已经被分成了4x4个小部分的四面体上应用镶嵌,这样在镶嵌之后,它将变成一个镶嵌因子为64的四面体?
所以,我已经将输入控制点更改为以下内容:
static const float controlPointPositionsQuad[] = {
-0.8, 0.8, 0.0, 1.0, // upper-left
0.0, 0.8, 0.0, 1.0, // upper-mid
0.0, 0.0, 0.0, 1.0, // mid-mid
-0.8, 0.0, 0.0, 1.0, // mid-left
-0.8, 0.0, 0.0, 1.0, // mid-left
0.0, 0.0, 0.0, 1.0, // mid-mid
0.0, -0.8, 0.0, 1.0, // lower-mid
-0.8, -0.8, 0.0, 1.0, // lower-left
0.0, 0.8, 0.0, 1.0, // upper-mid
0.8, 0.8, 0.0, 1.0, // upper-right
0.8, 0.0, 0.0, 1.0, // mid-right
0.0, 0.0, 0.0, 1.0, // mid-mid
0.0, 0.0, 0.0, 1.0, // mid-mid
0.8, 0.0, 0.0, 1.0, // mid-right
0.8, -0.8, 0.0, 1.0, // lower-right
0.0, -0.8, 0.0, 1.0, // lower-mid
};
我将drawPatches更改为16而不是4。 但结果是只显示了前4个点(左上角)。 如果我将顶点布局步长更改为以下内容:
vertexDescriptor.layouts[0].stride = 16*sizeof(float);
它仍然显示相同。
我不太清楚自己在做什么,但我想要的类似于将3D网格镶嵌,但对于我的情况只是一个细分的四边形。 我无法找到任何教授使用Metal API来实现这个功能的教程/代码示例。
请问有人能指点一下我吗?谢谢!
4 * sizeof(float)
。您是否更新了调用dispatchThreadgroups
以为新补丁生成镶嵌因子?您应该分派与补丁数量相同的线程。 - warrenmnumberOfPatchControlPoints
和patchCount
参数。第一个参数表示每个补丁的控制点数量(在你的情况下可能是4),而patchCount
参数确定要绘制的实际补丁数。 - warrenm