如何解决ModelIO:改变MDLAsset/MDLMesh/MDLSubmesh的材质
我在 iPad 应用程序中加载模型作为 MDLAsset 以使用 RealityKit 查看它们。由于我需要更改模型的纹理,我目前只需在 RealityKit 中的 ModelEntity 上应用 SimpleMaterial。这工作正常,但因为没有优雅的方式将 RealityKit 对象导出为例如一个美元文件。所以我需要将我的更改保存到 MDLAsset,然后可以轻松导出。
我设法持续地改变了 MDLAsset 的转换,但没有以任何方式改变材料。
当然,总会有使用 SceneKit 的解决方法,它可以轻松操作模型并将其导出到 MDLAsset。但我希望有更直接的方法。
我现在在做什么?
let modelAsset = MDLAsset(url: modelUrl)
guard let modelMesh = modelAsset.object(at: 0) as? MDLMesh else {
return
}
modelMesh.transform = some MDLTransform
// change material here
try! modelAsset.export(to: exportUrl)
我尝试了很多不同的方法,但大多数归结为:
let objectMaterial = SCNMaterial()
objectMaterial.diffuse.contents = modelColor
let modelMaterial = MDLMaterial.init(scnMaterial: objectMaterial)
for subMesh in modelMesh.submeshes as! [MDLSubmesh] {
subMesh.material = modelMaterial
}
我还尝试操作现有 subMesh 材质的 MDLMaterialProperties,但似乎该材质以某种方式受到写保护,至少我没有设法更改其 baseColor 语义。
那么有没有直接的方法可以将材质应用到 MDLAsset / MDLMesh / MDLSubmesh 上?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。