生成支持折痕的 MDLMesh?

Generating MDLMesh with crease support?

我已经能够创建一个 MDLMesh 并转换为 SCNGeometry 以在 SceneKit 中渲染。但是我无法在我的网格或几何体中获得折痕支持。

我只是想验证我是否采取了正确的步骤来为我的网格添加折痕支持。

  1. 创建 MDLSubmeshTopology
  2. 对于新拓扑对象,将 MDLMeshBuffers 分配给 edgeCreaseIndices、edgeCreases 并将 Int 分配给 edgeCreaseCount 属性。
  3. 使用拓扑对象创建 MDLSubmesh。

我不是在寻找具体的解决方案,只是想知道如何为网格添加折痕支持。任何有这方面经验的人都会很棒。

SceneKit 具有 edgeCreasesElement and edgeCreasesSource as well as the vertexCrease 语义。

您可以查看 SCNGeometry.subdivisionLevel 的文档了解更多信息。

假设您已将数据准备为四字节整数的边对,并将折痕值准备为浮点数,则以下内容应该有效。

    geometry.edgeCreasesSource = [SCNGeometrySource geometrySourceWithData:ecsData
                                                         semantic:SCNGeometrySourceSemanticEdgeCrease
                                                      vectorCount:creaseCount
                                                  floatComponents:YES
                                              componentsPerVector:1
                                                bytesPerComponent:4
                                                       dataOffset:0
                                                       dataStride:sizeof(float)];
    geometry.edgeCreasesElement = [SCNGeometryElement geometryElementWithData:eceData
                                                       primitiveType:SCNGeometryPrimitiveTypeLine
                                                      primitiveCount:creaseCount
                                                       bytesPerIndex:4];