SceneKit 中的自定义顶点属性

ndg*_*ndg 2 macos opengl-es ios scenekit

我正在使用 SceneKit 生成一些自定义几何图形。这工作正常,但我正在努力寻找一种方法来包含自定义顶点属性。具体来说,我希望每个顶点包含一个额外的 SCNVector3。

我发现了很多使用 shaderModifiers 来包含依赖于自定义统一值的GLSL/Metal 代码的示例,但还没有遇到包含顶点属性的方法。SceneKit 是否可以做到这一点,还是我的想法倒退了?

ric*_*ter 5

要制作自定义几何图形,您可以使用SCNGeometrySource对象来提供顶点位置、法线和纹理坐标属性,使用缓冲区或Data充满值的对象,然后将几何源传递给SCNGeometry init(sources:elements:)初始化程序。

当您创建 时SCNGeometrySource,您将其与类似于 GL/Metal 顶点属性的“语义”相关联。要创建自定义顶点属性,只需给它一个自定义语义。(在 ObjC 中,SCNGeometrySourceSemantic只是一个 typedef for NSString,所以你可以提供你自己的字符串名称。在 Swift 中,SCNGeometrySource.Semantic是一个类似 enum 的结构,你可以用String原始值扩展创建新成员。)

要在自定义着色器程序中使用自定义顶点属性,请使用setSemantic(_:forSymbol:options:)GL 着色器和(我认为)handleBinding(ofBufferNamed:frequency:handler:)金属着色器。