【问题标题】:How do I load/parse a SceneKit .scn file into my Metal app?如何将 SceneKit .scn 文件加载/解析到我的 Metal 应用程序中?
【发布时间】:2017-03-17 11:19:49
【问题描述】:

我想用 SceneKit 建模器创建一个 3D 场景,然后将其读入我的 Metal 应用程序。我看到有SceneKitModelIO API 可以做到这一点,但我不清楚这些部分是如何组合在一起的。

所以,我需要的是来自.scn 文件的路径 -> MDL Mesh -> 几何 + 纹理。我不清楚如何将Metal 着色器与SceneKit 建模器中创建的材质同步。

【问题讨论】:

    标签: scenekit metal modelio metalkit


    【解决方案1】:

    您在这里要问的主要有两个部分:将 SceneKit 数据导入 ModelIO,以及使用 Metal 渲染 ModelIO 数据。

      1234563 MDLAsset 从整个场景中使用 assetWithSCNScene:bufferAllocator: 然后遍历 ModelIO 中资产的对象层次结构以找到所需的网格,或遍历 SceneKit 中的节点层次结构以找到所需的 SCNNodeSCNGeometry 然后使用 objectWithSCNNode:bufferAllocator:meshWithSCNGeometry:bufferAllocator: 将网格获取到 ModelIO。
    1. 关于在 Metal 应用程序中使用 ModelIO 网格,Apple 有一个 sample code project,它展示了如何使用 ModelIO 加载 OBJ 网格,使用 MetalKit 将网格数据获取到 Metal GPU 缓冲区,并连接您从 ModelIO 获得的材质信息到着色器变量,以便在您自己的渲染器中使用。

    您应该能够将这两者放在一起:示例代码加载 OBJ 以获取 MDLAssetMDLMesh,使用 (1) 中的方法从 SceneKit 中获取资产或网格文件。

    SceneKit 材质模型当然比示例代码中使用的简单 Phong 着色器复杂得多。但是示例代码确实显示了如何遍历MDLMaterial 的属性并在金属着色器中设置相应的参数——如果您创建一个更复杂的着色器,只需按照相同的步骤将材质属性映射到您的着色器的输入.

    【讨论】:

    • 啊哈!所以 - 简而言之 - 我在建模器中给出几何和材料名称:“我的盒子”,“酷材料”,然后在遍历期间检索几何/材料 - 通过 SceneKit 或 ModelIO 遍历方法。关键是给事物贴标签。我说对了吗?
    • 您可以迭代材料,无论它们是否被标记,但标签当然可以帮助您跟踪。
    • 等等,什么?如何在没有标签的情况下识别场景中的项目。两个带纹理的球体意味着四 (4) 个标签(假设不同的材料描述)不是吗?
    • 尽管assetWithSCNScene:bufferAllocator: 已记录在案 - developer.apple.com/reference/modelio/mdlasset?language=objc - 它实际上无法使用。在代码中键入方法调用显示该方法不可用。叹息...
    • 您需要import SceneKit.ModelIO#import <SceneKit/ModelIO.h> 来获取SCN/MDL 桥接位。
    猜你喜欢
    • 2021-11-03
    • 2015-10-16
    • 2010-09-05
    • 2017-04-29
    • 2021-03-25
    • 2014-10-10
    • 2017-10-22
    • 2020-07-06
    • 1970-01-01
    相关资源
    最近更新 更多