2016-12-29 87 views
3

我想使用SceneKit的SCNRenderer將幾個模型繪製到我現有的GLKit OpenGL ES 3.0應用程序中,並匹配我現有的modelViewProjection轉換。當我加載SceneKit場景並使用SCNRenderer進行渲染時,SceneKit相機變換似乎被忽略,我只是得到一個默認的邊界框視圖。一般來說,我更傾向於提供我自己的矩陣,我不知道該怎麼做。如何使用SCNRenderer將SceneKit與現有的OpenGL相結合?

// 
// Called from my glkView(view: GLKView, drawInRect rect: CGRect) 
// 

// Load the scene 
let scene = SCNScene(named: "art.scnassets/model.scn")! 

// Create and add regular SceneKit camera to the scene 
let cameraNode = SCNNode() 
cameraNode.camera = SCNCamera() 
cameraNode.position = SCNVector3(x: 0, y: 0, z: 10) 
scene.rootNode.addChildNode(cameraNode) 

// Render into the current OpenGL context 
let renderer = SCNRenderer(context: EAGLContext.currentContext(), options: nil) 
renderer.scene = scene 
renderer.renderAtTime(0) 

我看到有暴露在SCN相機projectionTransform和我試圖操縱在爲好,但沒有結果。我也猜測,這只是一個投影轉換,並不期望完整的modelViewProjection轉換。

// Probably WRONG 
cameraNode.camera!.projectionTransform = SCNMatrix4FromGLKMatrix4(modelViewProjectionTransform) 

有沒有人有這樣混合SceneKit到OpenGL繪圖的例子?謝謝。

編輯:

Bobelyuk的參考例子是點,並幫助我解決問題的一半爲止。事實證明,雖然我加入了攝像頭節點我未能相機節點設置爲「pointOfView」:

scene.pointOfView = cameraNode 

的例子似乎說明如何採取一個OpenGL矩陣並倒轉來設置它相機,但是,我還沒有能夠得到這個與我的代碼一起工作。稍後我會再次更新代碼示例。

回答

0

結合它最終被證明是非常簡單的。除了將pointOfView設置爲相機節點之外,我只需將相機變換和相機投影變換正確設置到我自己的矩陣中即可。

這裏是更新的例子:

// 
// Called from my glkView(view: GLKView, drawInRect rect: CGRect) 
// 

// Load the scene 
let scene = SCNScene(named: "art.scnassets/model.scn")! 
let cameraNode = SCNNode() 
cameraNode.camera = SCNCamera() 
scene.rootNode.addChildNode(cameraNode) 

// Set my own matrices 
cameraNode.transform = SCNMatrix4Invert(SCNMatrix4FromGLKMatrix4(myModelViewMatrix)) 
cameraNode.camera!.projectionTransform = SCNMatrix4FromGLKMatrix4(myProjectionMatrix) 

// Render into the current OpenGL context 
let renderer = SCNRenderer(context: EAGLContext.currentContext(), options: nil) 
renderer.scene = scene 
renderer.pointOfView = cameraNode // set the point of view for the scene 
renderer.renderAtTime(0) 

對於新THOS這樣:模型視圖矩陣是定向場景中的矩陣,例如組成GLKMatrix4Scale和GLKMatrix4Rotate調用。投影矩陣是設置視野和視點的視角矩陣,例如通過構建對GLKMatrix4MakePerspective和GLKMatrix4MakeLookAt調用的調用。

相關問題