【发布时间】:2021-06-10 16:11:53
【问题描述】:
我正在处理一个学生项目,我想为我使用配备新 LiDAR 传感器的 iPad 扫描的网格设置纹理。
但是,要对网格进行纹理化,我需要添加纹理坐标。我目前的计划是将扫描的网格转换为 MDLMesh 并将所有子网格添加到 MDLAsset 容器中。之后,我使用 foreach 循环遍历 MDLMeshes。在每次迭代中,我在当前网格上调用函数“MDLMesh.addUnwrappedTextureCoordinates”。不幸的是,它总是导致崩溃。有时我可以在出现错误之前循环遍历 2 个网格,有时我什至不会将 UV 添加到单个网格。
我不是 swift 或 Model IO 方面的专家,但我觉得很奇怪,这个操作崩溃了,而我可以很好地添加法线。
我得到的错误如下所示:
Can't choose for edge creation
libc++abi.dylib: terminating with uncaught exception of type std::out_of_range: unordered_map::at: key not found
我使用的代码如下所示:
private func unwrapTextureCoordinates(asset: MDLAsset) -> MDLAsset{
let objects = asset.childObjects(of: MDLMesh.self)
for object in objects{
if let mesh = object as? MDLMesh{
mesh.addNormals(withAttributeNamed: MDLVertexAttributeNormal, creaseThreshold: 0.5)
mesh.addAttribute(withName: MDLVertexAttributeTextureCoordinate, format: .float2)
mesh.addUnwrappedTextureCoordinates(forAttributeNamed: MDLVertexAttributeTextureCoordinate)
}
}
return asset
}
希望有人能告诉我出了什么问题或指出我正确的方向。
【问题讨论】:
标签: ios swift graphics arkit metal