@鎖的答案看起來不錯,與一對夫婦補充:
(1)接入SCNNode worldTransform代替的情況下,變換的cameraNode是動畫或父:
let view = SCNMatrix4Invert(cameraNode.presentationNode.worldTransform)
(2)的代碼沒有按」 t佔視圖的寬高比。例如假設透視投影,你想做的事:
perspMatrix.m11 /= viewportAR; //if using Yfov -> adjust Y`
/* or, */
perspMatrix.m22 *= viewportAR; //if using Xfov -> adjust X`
其中,viewportAR = viewport.width/viewport.height
另一種方式來做到這一點是有一個節點與場景渲染的代表,以及來自檢索SceneKit的矩陣該代表(它們作爲選項通過):
FOUNDATION_EXTERN NSString * const SCNModelTransform;
FOUNDATION_EXTERN NSString * const SCNViewTransform;
FOUNDATION_EXTERN NSString * const SCNProjectionTransform;
FOUNDATION_EXTERN NSString * const SCNNormalTransform;
FOUNDATION_EXTERN NSString * const SCNModelViewTransform;
FOUNDATION_EXTERN NSString * const SCNModelViewProjectionTransform;
我還沒有意識到我需要的是反轉外部矩陣並將其設置爲'SCNCamera's'transform'!你的回答給了我一個提示。但是我需要旋轉外部矩陣,可能是因爲OpenCV的座標和OpenGL的座標差異。仍然我的3D模型看起來不符合真正的標記。也許內在參數問題... – akira108
很高興它有一點幫助。從來沒有看過AR的東西,希望別人可以幫助你。 – lock
@ akira108能否顯示相關代碼來設置相機和模型轉換? –