簡體   English   中英

如何在SceneKit中使用OBJ文件或CTM文件而不是DAE文件?

[英]How can I use OBJ file or CTM file instead of DAE file in SceneKit?

我曾經在IOS上使用openGL和metal渲染3d場景,我使用的文件格式是OBJ和CTM。 這些天我正在嘗試Scene Kit。 看來SceneKit只加載DAE文件。 我可以在Internet上找到的所有演示都使用DAE文件,我無法在其代碼中看到頂點和構面的數組。 如何加載OBJ文件或CTM文件而不是DAE文件?

加載OBJ文件

它就像傳遞MDLAsset一個有效的URL一樣簡單。

private func nodeForURL(url: NSURL) -> SCNNode
{
    let asset = MDLAsset(URL: url)
    let object = asset.objectAtIndex(0)
    let node = SCNNode(MDLObject: object)

    return node
}

這不僅會正確加載.obj文件,還會加載引用的.mtl文件。

你可以通過編寫自己的導入器來做到這一點。 看一下SCNGeometrySCNGeometrySourceSCNGeometryElement

編輯:啟動iOS 9.0和OS X 10.11 SceneKit可以打開OBJ文件或Model I / O支持的任何其他文件格式。 您可以使用以前存在的API來執行此操作(例如+sceneNamed: +sceneWithMDLAsset:或新的+sceneWithMDLAsset:方法。

編輯:ModelIO現在可以加載OBJ文件。 我自己沒有試過這條路。 這個答案是在iOS 9和OS X 10.11之前編寫的:

SceneKit無法在iOS上加載DAE文件,實際上,它實際上是將DAE文件預編譯為iOS設備的內部格式。

如果你想將OBJ轉換為DAE,你可以在OS X上編寫一個簡單的導入器/導出器 - 在OS X上,SceneKit實際上會讀取OBJ文件(它沒有記錄,但它可以工作)並且會編寫DAE。

或者您可以在github上下載“Assimp”項目,如果您想嘗試自己閱讀OBJ,但是將它轉換為SceneKit對象會有一些工作。

從iOS 9 / OS X 10.11開始,您可以使用Model I / O的MDLAsset導入OBJ文件(以及其他一些格式)。 如何將Wavefront OBJ文件轉換為具有模型I / O的SCNNode具有示例代碼。

有關支持的文件格式的更多信息:

SceneKit支持以下3D文件格式,可以使用Xcode中的場景編輯器將其導入.scn文件:

DAE,OBJ,Alembic,STL和PLY文件。

來源: WWDC 2015會議“SceneKit的增強”02:24

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM