gpt4 book ai didi

ios - 分割四边形上的 Metal 镶嵌

转载 作者:行者123 更新时间:2023-11-29 11:24:49 25 4
gpt4 key购买 nike

我对曲面分割完全陌生,对 Metal API 也比较陌生,一直在引用这个示例代码 https://developer.apple.com/library/archive/samplecode/MetalBasicTessellation/Introduction/Intro.html

我意识到 iOS 上的最大曲面分割因子是 16,与 OSX 上的 64 相比,这对于我的用例来说非常低。我想我需要在一个四边形上应用镶嵌分割,该四边形首先被分割为 4 乘以 4 个较小的部分,以便在镶嵌之后它最终会变成镶嵌因子为 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 教授此内容的教程/代码示例。

有人可以给我指出正确的方向吗?谢谢!

最佳答案

以下是一些需要检查的事项:

  1. 通过分派(dispatch)适当大小的计算网格,确保您的镶嵌因子计算内核为所有补丁生成内部/边缘因子。
  2. 当分派(dispatch)线程组来执行您的分割因子内核时,使用一维线程组计数和大小(这样总线程数就是补丁的数量,并且传递给分派(dispatch)方法的两个大小的高度都是 1)。
  3. 绘制面片时,第一个参数 (numberOfPatchControlPoints) 应等于每个面片中控制点的数量(三角形为 3;四边形为 4),第三个参数应为面片数量画画。

关于ios - 分割四边形上的 Metal 镶嵌,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59476610/

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