2017-06-29 44 views
6

Udało mi się uzyskać sześcian (SCNNode) umieszczony na powierzchni, na której znajduje się kamera, jednak bardzo trudno jest to zrobić (?) zadaniem również umieszczania tekstu w tej samej pozycji.ARKit: Umieszczanie SCNText w określonym punkcie przed kamerą

Utworzono SCNText i kolejny SCNNode, jednak gdy dodaję go do rootNode tekst zawsze wydaje się być dodany nad moją głową i poza kamerą po prawej (co mówi mi, że jest to globalny punkt początkowy).

Nawet jeśli używam dokładnie tych samych wartości pozycji, których użyłem dla kostki, węzeł SCNText nadal umieszczany jest nad moją głową w tym samym miejscu.

Przepraszam, jeśli to podstawowe pytanie, nigdy wcześniej nie pracowałem w SceneKit.

Odpowiedz

12

Centrum współrzędnych dla SCNGeometry jest jego centrum. Ale kiedy tworzysz SCNText punkt ośrodka jest gdzieś w lewym dolnym rogu:

Center point for a box

Center point for text

trzeba wyśrodkować tekst w pierwszej kolejności. Można to zrobić poprzez sprawdzenie obwiednię węzła zawierającego tekst i ustawienie pivot przekształcić zmienić centrum Teksty do jej rzeczywistego centrum:

func center(node: SCNNode) { 
    let (min, max) = node.boundingBox 

    let dx = min.x + 0.5 * (max.x - min.x) 
    let dy = min.y + 0.5 * (max.y - min.y) 
    let dz = min.z + 0.5 * (max.z - min.z) 
    node.pivot = SCNMatrix4MakeTranslation(dx, dy, dz) 
} 

Edit:

Należy również zauważyć, this answer, który wyjaśnia kilka dodatkowych pułapek: Tekst o rozmiarze 16 pkt. To 16 jednostek SceneKit. Ale w jednostkach ARKit 1 SceneKit = 1 metr!

+0

jakikolwiek pomysł, jak to zrobić w obj-c? –