2013-08-02 72 views
4

在Mac OS X上使用SceneKit來加載COLLADA(DAE)文件,您可以通過遍歷SCNNode的樹和它們各自的SCNGeometry:s來輕鬆獲取所有幾何,頂點數據使用[geometry geometrySourcesForSemantic:SCNGeometrySourceSemanticVertex]。使用SceneKit從DAE/COLLADA提取動畫頂點

但是,給定一個包含動畫對象的DAE文件 - SceneKit能夠在給定時間給出動畫中每個頂點的確切位置,還是我可以從關聯的CAAnimation對象中提取所有動畫數據?

我的用例是我想使用SceneKit來導入DAE文件,但是使用我自己的渲染管道來處理其他的東西。

澄清 顯然有兩種方法如何可以這樣實現:

1)獲得,並從關聯動畫解析關鍵幀

2)讓SceneKit評估現場給定時間,並給我預先計算的頂點(等)座標

我在用例中的目標是#2,但是如果我能找到由SceneKit#1使用的關鍵幀格式的文檔也是可以接受的。

我的問題是,#1我不設法挖比任何進一步的以下內容:

SCNNode.animationKeys給出了可用於給定SCNNode動畫鍵,[SCNNode animationForKey:關鍵]從給出CAAnimationGroup對象哪些CAAnimation對象是通過CAAnimationGroup.animations獲取的。該CAAnimation對象是(我的DAE文件)CAKeyframeAnimation的現實情況,從中我得到CAKeyframeAnimation.values:

關鍵幀(1/40):< 00000000 0000f0bf 00000080 d9956d3c 000000a0 0e32a13c 00000000 00000000 00000020 00000020 636772bc 00000000 2914ef3f 0f7ecebf 00000000 00000000 00000020 00000000 1324a1bc 00000020 0f7ecebf 2914efbf 00000000 00000000 00000000 00000000 000000c0 205c6d40 00000000 00a069c0 00000000 0000f03f>

等。因此,要解決#1上面的方法我需要找到用於這些關鍵幀的格式。

+0

作爲場景渲染器的場景視圖具有'currentTime'屬性。如果你改變它,它會爲你更新幾何嗎? –

+0

由於我沒有使用SceneKit來執行任何渲染,只是將幾何圖形導入到我自己的渲染器中,所以我沒有SceneKit中的任何SceneView或SceneRenderer處於活動狀態,我可以修改currentTime屬性,或者我誤解了您的建議? – simonfi

+0

你正確理解我的問題。 –

回答

1

我的理解是,您需要從SceneKit檢索節點(對象位置)+幾何(頂點,法線...)+動畫信息 - 然後將這些信息轉換爲引擎的表示形式,然後播放動畫並轉換頂點在你的引擎中。

SceneKit將爲您提供幾何圖形和層次結構信息使用SCNNode/SCNGeometry API。 您可以使用SCNNode的SCNAnimatable協議(animationKeys/animationForKey :)檢索動畫

您還可以使用CoreAnimation的CAKeyframeAnimation/CAAnimationGroup API檢索動畫的各個關鍵幀。

+0

謝謝,我已經嘗試了這種方法 - 如果您也有關於用於實際關鍵幀的數據格式的信息,這將非常有幫助。 – simonfi