场景套件。哪条路向上?

Posted

技术标签:

【中文标题】场景套件。哪条路向上?【英文标题】:SceneKit. Which way is up? 【发布时间】:2014-09-04 12:42:53 【问题描述】:

似乎大多数 3D 创作应用程序都使用 Z 作为“上”轴。而 SceneKit 使用 Y 作为“向上”轴。 SceneKit 允许您将场景加载为 Collada .DAE 文件。通过以下任一方式加载场景时:

SCNScene(named: String?, inDirectory: String?, options: [NSObject : AnyObject]?)

SCNSceneSource(URL url: NSURL!, options: [NSObject : AnyObject]!)

您可以指定包括 SCNSceneSourceConvertToYUpKey 和 SCNSceneSourceConvertUnitsToMetersKey 在内的选项。

相应地设置这些,当我将各种节点添加到我自己的场景中时,我希望它们能够被转换和缩放,这些场景是由加载场景中的节点构建的。但这些选项似乎没有效果。

let myScene = SCNScene(named: "Scene.dae", inDirectory: nil, options: [SCNSceneSourceConvertToYUpKey:true, SCNSceneSourceConvertUnitsToMetersKey:25.4])

我是否误解了这些选项参数的含义?

【问题讨论】:

我用过的唯一 Z-up 应用是 Blender。标准是 Y 向上,右手。你还在用什么使用 Z-up? Sketchup 和 3DS Max 也都使用 Z-Up,而且似乎也默认以英寸为基本单位。 我想我可能已经找到了问题所在。 SceneKit:警告,SCNSceneSourceConvertUnitsToMetersKey 和 SCNSceneSourceConvertToYUpKey 对压缩资产没有影响。改用 Xcode 的压缩选项 但是将文件设置为未压缩会出现以下错误:SceneKit IO:错误,此平台不支持 COLLADA 文件。所以 DAE 文件似乎不支持这些选项? 【参考方案1】:

SceneKit 不会直接在 ios 上加载 DAE(或 ABC)文件——它会加载私有 Apple 格式的场景,当您在项目中包含场景文件时 Xcode 会自动将其转换为该格式。此转换的一部分是转换上轴的选项。

我不相信当您简单地将 DAE 文件包含为捆绑资源时,该选项会暴露出来。 (可能是a good bug to file。)但是,无论如何,最好使用新的 SceneKit 资产目录功能 - 将您的 DAE 文件和任何外部资源(纹理)放入具有 .scnassets 扩展名的文件夹中,并且Xcode 将在您构建时将它们一起处理以针对目标设备进行优化。然后,当您在 Xcode 导航器中选择该文件夹时,您将获得一个用于场景构建选项的编辑器:

那里的所有框都可以检查。 :) (因为第一个没有解释:交错意味着组织几何的顶点数据,以便在顶点处理期间获得更好的 GPU 内存局部性以减少缓存未命中,这对于嵌入式设备的性能很重要。)

嗯,不过我没有看到任何关于单元的信息。可能是another good bug to file。

还有另一种选择——所有 SceneKit 对象都实现了NSSecureCoding 协议,因此您可以在 OS X 上加载和预处理场景,然后使用NSKeyedArchiver 将其写出。将生成的文件作为捆绑资源包含在您的 iOS 项目中,Xcode 不会对其进行预处理(它已经尽可能地压缩和优化)——如果您使用 .scn 扩展名命名它,您可以使用所有SCNSceneSCNSceneSource 方法用于加载它,就像加载(预处理的)DAE 文件一样。

【讨论】:

要将 dae 文件转换为 SCNScene(named:...) 可以读取的文件,您可以在终端中使用以下命令行手动转换文件:/Applications/Xcode. app/Contents/Developer/usr/bin/scntool --convert InFile.dae --format c3d --output OutFile.dae --force-y-up --force-interleaved --look-for-pvrtc-image (当然,用您自己的文件名替换 InFile.dae 和 OutFile.dae)抱歉,在 cmets 中无法进行真正的格式化。 如果您需要手动进行此转换,该命令行很有用 — 谢谢!但是,如果您将文件放入 Xcode 中的 SCNAssets 文件夹中,它会在构建时自动为您执行此转换。 只需添加一条注释即可运行scntool,而无需键入Xcode 安装的整个路径,使用:xcrun scntool <arguments here> 在注释中添加注释:您也可以直接在 Xcode 中执行此操作。在 .scnassets 目录中选择 .dae,然后单击编辑器/转换为场景文件格式 (.scn)。 在当前的 Xcode 8.2.1 中确实所有这些选项都消失了,包括 Y-up 轴选项。

以上是关于场景套件。哪条路向上?的主要内容,如果未能解决你的问题,请参考以下文章

销售订单项目明细存储,走哪条路?

在 Linux 3D 编程中走哪条路? [关闭]

向上转型和向下转型的用处(面向对象应用1)

Java向上转型和向下转型

mongodb中DBRefs只能向上查找一级吗

Android:向上滚动时显示工具栏(向上拖动),向下滚动时隐藏(向下拖动)