Ist es möglich, SceneKits unprojectPoint zu verwenden, um einen 2D-Punkt in 3D zu konvertieren, ohne einen Tiefenwert zu haben? Ich muss nur die 3D-Position in der XZ-Ebene finden. Y kann immer 0 oder ein beliebiger Wert sein, da ich es nicht verwende.Wie konvertiert man den 2D-Punkt mit dem unprojectPoint von SceneKit in 3D, ohne einen Tiefenwert zu haben?
Ich versuche dies für iOS 8 Beta zu tun.
hatte ich etwas ähnliches mit JavaScript und Three.js (WebGL) wie folgt aus:
function getMouse3D(x, y) {
var pos = new THREE.Vector3(0, 0, 0);
var pMouse = new THREE.Vector3(
(x/renderer.domElement.width) * 2 - 1,
-(y/renderer.domElement.height) * 2 + 1,
1
);
//
projector.unprojectVector(pMouse, camera);
var cam = camera.position;
var m = pMouse.y/(pMouse.y - cam.y);
pos.x = pMouse.x + (cam.x - pMouse.x) * m;
pos.z = pMouse.z + (cam.z - pMouse.z) * m;
return pos;
};
Aber ich weiß nicht, wie das Teil mit unprojectVector zu SceneKit übersetzen.
Was ich tun möchte, ist in der Lage, ein Objekt nur in der XZ-Ebene zu ziehen. Die vertikale Achse Y wird ignoriert.
Da sich das Objekt entlang einer Ebene bewegen müsste, wäre eine Lösung die hitTest-Methode, aber ich denke nicht, dass es in Bezug auf die Leistung für jedes Touch/Drag-Ereignis sehr gut ist. Außerdem würde es dem Objekt nicht erlauben, sich außerhalb der Ebene zu bewegen.
Ich habe eine Lösung basierend auf der angenommenen Antwort here versucht, aber es hat nicht funktioniert. Wird ein Objekt mit einem Tiefenwert für unprojectPoint gezogen, so bleibt das Objekt nicht in der +/- Z-Richtung. Es bleibt nicht zu lange unter dem Finger, sondern entfernt sich von ihm. Ich muss das gezogene Objekt unter dem Finger bleiben, egal wohin es in der XZ-Ebene bewegt wird.
Bitte schauen Sie auf meine Antwort, um zu sehen, was ich versuche zu tun. – CAM