Ich habe diese App, die nur in der Landschaft funktioniert.Konvertieren einer SCNVector3-Position in eine CGPoint SCNView-Koordinate?
Ich habe ein Objekt auf Scenekit. Das Objekt ist an einer bestimmten Position, angegeben durch:
SCNNode * buttonRef = [scene.rootNode childNodeWithName:@"buttonRef" recursively:YES];
SCNVector3 buttonRefPosition = [buttonRef position];
Jetzt brauche ich, dass SCNVector3
-mainView
2D-Koordinaten zu konvertieren, wo
mainView = (SCNView *)self.view;
Die Szene orthogonale Kamera verwendet, so dass keine Perspektive. Die Kamera ist die Standardkamera. Keine Drehung, keine Übersetzung. Die orthographische Skalierung der Kamera ist 5.4.
Wie konvertiere ich das?
Ich habe andere Antworten auf SO über die umgekehrte Frage gefunden, die von CGPoint zu SCNVector3 konvertiert, aber klingt nicht offensichtlich für mich, wie man das Gegenteil tut, von SCNVector3 zu CGPoint.
Wenn die SCNView eine Unterklasse von UIView ist, dann ist (0,0) der obere linke Punkt und im Fall der iPhone 6-Landschaft ist (667, 375) der untere rechte Punkt.
Dieser Knopf von mir ist fast ganz rechts und in der Mitte der Höhe. In Bezug auf die UIKit würde ich sagen, dass diese Taste ist (600, 187), aber wenn ich dies tun: (?)
SCNNode * buttonRef = [scene.rootNode childNodeWithName:@"buttonRef" recursively:YES];
SCNVector3 buttonRefPosition = [buttonRef position];
SCNVector3 projectedPoint = [mainView projectPoint: buttonRefPosition];
ich Project gleich (7,8, 375, 0)
und Wenn ich eine 10x10-Ansicht zu der Koordinate (7.8, 375) mit UIKit hinzufüge, bekomme ich eine Ansicht unten links !!
Wie gesagt, die App funktioniert nur im Querformat, aber diese Koordinatensysteme sind alle durcheinander.
Ist die 'buttonRef' Knotengeometrie ein SceneKit Objekt (' SCNSphere', 'SCNBox ', etc) oder etwas, das in einem 3D-Modellierungswerkzeug erstellt und als Datei geladen wurde le? Alle SceneKit-Objekte haben einen Ursprung bei 0,0,0 (damit meine ich, dass das Zentrum einer Kugel bei 0,0,0 liegt), es kann sein, dass das Modell, das Sie verwenden, Geometrie hat, die nicht um 0 zentriert ist. Eine schnelle Möglichkeit zum Überprüfen besteht darin, eine kleine "SCNSphere" als untergeordnetes Element des buttonRef-Knotens hinzuzufügen und zu bestätigen, dass sie an der Stelle angezeigt wird, an der Sie den Ursprung Ihrer Geometrie vermuten. FWIW 'projectPoint' gibt erwartete 2D-Koordinaten in meiner App zurück. – lock
Ihr Kommentar macht Sinn. Um zu testen, dass ich das getan habe, [scnView projectPoint: SCNVector3Zero]; 'oder mit anderen Worten, ich projiziere 0,0,0. Die Projektion gibt mir (0, 375, 0). Wie kann man 0,0,0 auf Scenekit - das ist in meinem Fall ist was genau in der Mitte der Kamera zu sehen ist (0,375,0) oder tatsächlich (0,375) auf UIKit? ... das ist ein Punkt auf der rechten Seite? – SpaceDog
Guter Test, ich fügte hinzu, dass in mein Projekt, sogar auf eine orthographische Projektion umgeschaltet und immer noch einen 2D-Punkt in der Mitte meiner Sicht. Ist es möglich, dass Ihr SCNView viel größer als die Bildschirmgröße ist? Was bedeutet das Ausgeben der Rahmen/Grenzen Ihres SCNView (in didLayoutView)? Wenn Ihre Ansicht doppelt so groß ist wie der Bildschirm und die linke Hälfte nicht sichtbar ist, würde das die Zahlen erklären, die Sie erhalten. – lock