3D 模型无法在 Scenekit 中正确加载

Posted

技术标签:

【中文标题】3D 模型无法在 Scenekit 中正确加载【英文标题】:3D model not loading correctly in Scenekit 【发布时间】:2018-11-05 16:48:07 【问题描述】:

因此,我购买了汽车的 3D 模型以显示在我的 ARKIT 应用程序中。该文件夹包含不同的模型格式和单个图像。

我将 .dae 文件拖放到我的项目中。这是文件结构。

但是,当添加到场景中时,轴将完全关闭并且无法正确加载。它没有加载带有纹理的完整模型,并且会在我上方加载。

参见示例:

然后我决定在 Blender 中加载 .Blender 文件并再次导出为 colada .dae 文件。

这是添加到我的项目时的结果。

当在现实世界中加载它时,我站的地方会出现半辆汽车,规模大得离谱。

我已经使用单独的模型尝试了该项目,并且效果很好。有谁知道如何使用 3D 模型在我的应用程序中正确加载?

【问题讨论】:

【参考方案1】:

我在缩放已购买的模型时遇到了一些问题。您不应该发布链接,但它太大而无法粘贴 - 我按照本指南缩小模型并在导出前将它们旋转到搅拌机中的适当位置。

https://jibransyed.wordpress.com/2014/06/05/how-to-correct-scale-and-rotation-of-static-blender-models-for-unity/

在大多数模型上,我使用它来加载:

func loadCollada(sceneName: String, objName: String) -> SCNNode
    
        let vScene = SCNScene(named: sceneName)!
        let gObject = vScene.rootNode.childNode(withName: objName, 
 recursively: true)!
        return gObject
      

在一些较大的型号上,我必须这样做:

func collada2SCNNode(filepath: String) -> SCNNode

    let returnNode = SCNNode()
    let scene = SCNScene(named: filepath)
    for vNode in (scene?.rootNode.childNodes)!
    
        returnNode.addChildNode(vNode)
    
    return returnNode

然后设置 Y UP: scntool --convert fighter0.dae --format c3d --output out.dae --force-y-up --force-interleaved --look-for-pvrtc-image

【讨论】:

以上是关于3D 模型无法在 Scenekit 中正确加载的主要内容,如果未能解决你的问题,请参考以下文章

在 SceneKit 中支持 Collada/DAE 模型都有哪些要求?

iOS - Scenekit3D引擎初探之 - 导入模型+上传服务器+下载并简单设置

如何在 Scenekit 的 3D 模型上添加文字(评论)?

如何防止 SceneKit 动画在加载时立即播放?

在 Blender 中创建的 3D 模型上使用材质

3d 模型 SceneKit/ARKit 的哪种格式文件更好用