2017-07-20 8 views
6

मैं ARKit का उपयोग कर रहा हूं और वास्तविक दुनिया की जगह में एक रोटेशन और (x, y, z) निर्देशांक के रूप में कैमरे की स्थिति प्राप्त करने का प्रयास कर रहा हूं। मैं इसे प्राप्त करने के लिए प्रबंधित कर सकता हूं matrix_float4x4, जिसे मैं वास्तव में समझ में नहीं आता, और यूलर कोण केवल रोटेशन दिखाते हैं।matrix_float4x4 से x y z space

यहाँ मैं वर्तमान में क्या है:

let transform = sceneView.session.currentFrame?.camera.transform 
let eulerAngles = sceneView.session.currentFrame?.camera.eulerAngles 

यहाँ उत्पादन मैं हो रही है:

eulerAngles: float3(-0.694798, -0.0866041, -1.68845) 

transform: __C.simd_float4x4(columns: (float4(-0.171935, -0.762872, 0.623269, 0.0), float4(0.982865, -0.0901692, 0.160767, 0.0), float4(-0.0664447, 0.640231, 0.765304, 0.0), float4(0.0, 0.0, 0.0, 1.0))) 

वहाँ एक रास्ता matrix_4x4 कन्वर्ट करने के लिए है, या वहाँ इसे पाने के लिए एक आसान तरीका है जानकारी?

धन्यवाद!

+0

एक> 6 साल सदस्य कि आप जानते होंगे: sceneView की pointOfView संपत्ति का उपयोग कर कैमरा की स्थिति n और कोड स्वरूपण के बारे में परवाह है ... –

+0

आप वास्तव में क्या करने की कोशिश कर रहे हैं? –

उत्तर

9

मैं matrix_float4x4 एक्सटेंशन का उपयोग कर रहा है कि के लिए:

extension matrix_float4x4 { 
    func position() -> SCNVector3 { 
     return SCNVector3(columns.3.x, columns.3.y, columns.3.z) 
    } 
} 

का उपयोग करना:

let position = transform.position() 

या आप कोड में सीधे स्थिति में बदल सकते हैं:

let position = SCNVector3(
    transform.columns.3.x, 
    transform.columns.3.y, 
    transform.columns.3.z 
) 
3

आपको 4x4 मैट्रिक्स के बारे में जानना चाहिए क्योंकि वे वास्तव में सभी 3 डी विज़ुअलाइजेशन और गणित के लिए आधार हैं।

  • 4x4 मैट्रिक्स से स्थिति प्राप्त करने के लिए प्रविष्टियों m41, m42, m43 का उपयोग करें।
  • घूर्णन प्राप्त करने के लिए m11 में 3x3 मैट्रिक्स का उपयोग करें ... m33।
1

दो जिस तरह से आप ca n कैमरा की स्थिति मिलती है:

  1. सत्र के currentFrame संपत्ति का उपयोग कर आप कैमरे के बदलने और फिर उस का उपयोग प्राप्त कर सकते हैं स्थिति प्राप्त करने के लिए द्वारा:

    matrix_float4x4 cameraTransform = self.sceneView.session.currentFrame.camera.transform; 
    SCNVector3 cameraPosition = SCNVector3Make(cameraTransform.columns[3].x, 
    cameraTransform.columns[3].y, cameraTransform.columns[3].z); 
    
  2. या प्राप्त

    SCNVector3 cameraPosition = self.sceneView.pointOfView.worldPosition; 
    
संबंधित मुद्दे