3

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

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

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

我不是在寻找特定的解决方案,只是大致了解如何为网格添加折痕支持。任何有这方面经验的人都会很棒。

4

2 回答 2

2

SceneKit 具有和edgeCreasesElement语义。edgeCreasesSourcevertexCrease

您可以查看文档以SCNGeometry.subdivisionLevel获取更多信息。

于 2016-12-09T22:54:15.260 回答
2

假设您已将数据准备为四字节整数的边对,并且折痕值作为浮点数,以下应该可以工作。

    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];
于 2016-12-15T00:09:53.087 回答