Apple RealityKit: 如何使用ModelEntity绘制多边形平面?

4

我曾经使用了一些SceneKit的API,例如

SCNGeometrySource(vertices: vertices)

SCNGeometryElement(data: indexData,
                   primitiveType: .polygon,
                   primitiveCount: 1,
                   bytesPerIndex: MemoryLayout<Int32>.size)

或者

SCNShape(path: bezierPath, extrusionDepth: 0.0003)

实现在场景中绘制多边形。

现在我正在尝试通过RealityKit重新编写实现方式。 但是我只找到了一些基本的网格API,比如

generatePlane(width: Float, height: Float, cornerRadius: Float = 0) -> MeshResource
generatePlane(width: Float, depth: Float, cornerRadius: Float = 0) -> MeshResource
generateBox(size: Float, cornerRadius: Float = 0) -> MeshResource
generateSphere(radius: Float) -> MeshResource
...

我希望你能提供类似于SceneKit方便易用的东西。
2个回答

2

RealityKit没有用于在运行时创建自定义几何体的API。


编辑: RealityKit 2引入了对动态网格的支持。请参见WWDC21中的使用RealityKit 2探索高级渲染


似乎真的缺少这些API。 - Jian Jin
那我必须使用SceneKit吗? - user3064538
1
RealityKit 2 引入了对动态网格的支持。 - mnuages

0
这里有一些代码示例,展示了如何使用MeshDescriptor从顶点程序化地生成网格。
let positions: [SIMD3<Float>] = [SIMD3(x:0.0,  y:0.0,  z:0.0),
                                 SIMD3(x:0.1,  y:0.01, z:0.0),
                                 SIMD3(x:0.07, y:0.07, z:0.05),
                                 SIMD3(x:0.0,  y:0.1,  z:0.0),
                                 SIMD3(x:0.05, y:0.05, z:0.0)]

let counts: [UInt8] = [5]
let indices: [UInt32] = [0, 1, 2, 3, 4]

var meshDescriptor = MeshDescriptor()
meshDescriptor.positions = .init(positions)
meshDescriptor.primitives = .polygons(counts, indices)
let polygon = try! MeshResource.generate(from: [meshDescriptor])

除了多边形之外,RealityKit目前还有另外两种基本类型:三角形和三角形与四边形。
要了解更多详细信息,请参阅WWDC会议中@mnuages在他们的回答中提供的链接,从大约26分35秒开始。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接