从Blender导出到COLLADA/.dae格式时包含纹理,以便在SceneKit中使用

Jon*_*nny 12 blender collada ios scenekit

我可以使用COLLADA/.dae格式导出在Blender中创建的网格,以便在SceneKit中使用 - 但iOS设备上不显示任何纹理.

此外,OS X上的预览不会打开从Blender导出的任何COLLADA文件 - 但是侧边栏预览显示网格.出口使这项工作需要哪些选项?

Fli*_*Fun 24

首先创建一个scnassets文件夹(不是必需但有用)

  1. 在桌面上创建一个文件夹,并为其添加".scnassets"扩展名

  2. 把你的collada(.dae)文件和你将在其中使用的任何纹理放在一起.

  3. 将文件夹拖到项目中并像往常一样保存为副本.

  4. 单击您的scnassets文件夹,您将看到一个复选框(如果没有检查它)以转换为"y"向上轴.

为场景模型指定纹理

  1. 在xcode中单击项目内的collada(.dae)文件.

  2. 您应该看到您的场景,并在其左侧列出相机,灯光,材料等.这是你的场景树.

  3. 打开材料选项卡,然后单击您的某个材料.

  4. 在检查窗口的右侧,单击蓝色球形图标(材料检查器)以查看该材质的漫反射,镜面反射等.

  5. 单击漫反射选项卡,当它打开时,您应该在项目中选择颜色和纹理.在3d程序中选择模型上使用的纹理.只要您在3D程序中正确地展开UV,它们就应该立即应用于场景视图中.

如果我想在加载场景后更改我的素材怎么办?很高兴你问!

为此,我们必须使用SCNSceneSource类的entryWithIdentifier方法.我将在这里使用swift因为它太棒了!开始了...

  1. 获取场景的网址(.dae)就像这样......

    let url = NSBundle.mainBundle().URLForResource("YourFolder.scnassets/yourScene", withExtension "dae")
    
    Run Code Online (Sandbox Code Playgroud)
  2. 现在让我们使用该网址...

    let source = SCNSceneSource(URL: url, options: nil)
    
    Run Code Online (Sandbox Code Playgroud)
  3. 单击您的.dae,在"场景图"下面是项目列表,其中一项是您的几何图形.它的右边会有一个发球水壶,表示如此.我们将在这里使用它的名字.假设您的几何图形名称为Geo.像这样使用它......

    let yourGeometry = source.entryWithIdentifier("Geo", withClass: SCNGeometry.self) as SCNGeometry
    
    Run Code Online (Sandbox Code Playgroud)
  4. 现在我们有一个源代码连接到名为yourGeomerty的SCNNode.让我们创建一个像UIColor这样的新材料......

    let newMaterial = SCNMaterial()
    newMaterial.diffuse.contents = UIColor.redColor()
    
    Run Code Online (Sandbox Code Playgroud)
  5. 最后我们将使用newMaterial切换旧材料,如此...

    yourGeometry.geometry.replaceMaterialAtIndex(0, withMaterial: newMaterial)
    
    Run Code Online (Sandbox Code Playgroud)

如果您有多种材料,请使用它和其他索引.您还可以使用UIImage类来使用其他纹理而不是颜色.

提示 如果要添加或删除scnassets文件夹中的内容,请导航到项目文件夹以执行此操作而不是xcode.我花了一段时间才弄清楚这么想我会救每个人的麻烦.