【问题标题】:Collada to SceneKit to iOSCollada 到 SceneKit 到 iOS
【发布时间】:2013-06-12 00:58:25
【问题描述】:

我有一个 collada 文件,它包含一个多维数据集,我将数据导出到一个文件(只是原始字节),然后将字节导入 iOS。一切都好,我检查了数据,所有在 iOS 和 osx 上的顶点看起来都一样。

但是,当我检查 Collada 文件时,法线与 SceneKit 的法线非常不同

在 SceneKit 中,法线为 0、-1 或 1。在 Collada 文件中,我有 -2.831...、-1.31...等。

感谢任何见解,

谢谢

D

【问题讨论】:

  • 文件中的法线似乎没有标准化(长度为 1)。也许您的程序在导出几何图形时并不关心这一点。
  • 您的意思是在 Collada 文件中法线没有(标准化),但在场景工具包中却是?这有关系吗?还是这是正常的?
  • -2.831 比 -1 大,所以它没有被标准化。在大多数情况下,您只关心表面法线的角度,因此最终结果应该在视觉上很重要。如果这是您在数据中看到的差异,并且您在屏幕上看到的与预期的一样,那么我会说您无需担心。
  • 你能从 Collada 及其对应的 SceneKit 中发布一个实际的 x,y,z 法线吗?
  • 嗨,Wil,我实际上解决了我的问题(不记得这个确切的问题是什么),但我最终从头开始重写所有内容并更好地理解它,我现在可以从搅拌机导出到 SceneKit(使用 collada),然后将我的字节格式写入磁盘,在 iPhone 中处理。

标签: ios opengl-es collada scenekit


【解决方案1】:

在 Swift 中,以下代码会将 collada .dae 文件加载到场景中:

let url = NSBundle.mainBundle().URLForResource("scene", withExtension: "dae")
var error: NSErrorPointer? = nil
let scene = SCNScene.sceneWithURL(url, options: nil, error: error!)

在 Obj-C 中:

NSURL *url = [[NSBundle mainBundle] urlForResource:@"scene" withExtension:@"dae"];
NSError *error;
SCNScene *scene = [SCNScene sceneWithURL:url options:nil error:&error];

http://adcdownload.apple.com//videos/wwdc_2012__sd/session_504__introducing_scene_kit.mov

(我发现使用 XCode 的花花公子自动完成转换为 Swift。)

【讨论】:

  • 这不会加载 DAE 本身。在 iOS 中,SceneKit 只能加载在 Xcode 中添加到应用程序包资源中的 DAE 文件。当 Xcode 构建您的应用程序时,它会将 DAE 转换为压缩的、设备优化的格式。
  • 如果您将文件导入到项目中,它很有可能会得到优化,但由于 API 假定 URL 而非文件路径,我相信即使您直接加载相关文件,它也应该可以工作来自服务器的文件。
  • the docs。只是 Xcode 烘焙的资产或 iOS 中 NSKeyedArchiver 序列化的 SCN 对象。虽然我想你可以使用 Xcode 来烘焙 DAE,然后将生成的文件放在服务器上。
猜你喜欢
  • 2015-08-30
  • 2014-10-12
  • 2013-10-14
  • 2015-07-13
  • 2014-11-15
  • 2015-01-12
  • 2018-05-19
  • 2015-06-23
  • 2017-05-12
相关资源
最近更新 更多