È possibile utilizzare SceneKit unprojectPoint per convertire un punto 2D in 3D senza avere un valore di profondità? Ho solo bisogno di trovare la posizione 3D nel piano XZ. Y può essere sempre 0 o qualsiasi valore poiché non lo sto usando.Come convertire il punto 2D in 3D usando un unprojectPoint di SceneKit senza avere un valore di profondità?
Sto provando a farlo per iOS 8 Beta.
ho avuto qualcosa di simile con Javascript e Three.js (WebGL) come questo:
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;
};
Ma non so come tradurre la parte con unprojectVector a SceneKit.
Quello che voglio fare è poter trascinare un oggetto sul piano XZ. L'asse verticale Y verrà ignorato.
Poiché l'oggetto dovrebbe spostarsi lungo un piano, una soluzione sarebbe utilizzare il metodo hitTest, ma non penso che sia molto buona in termini di prestazioni per farlo per ogni evento touch/trascinamento. Inoltre, non permetterebbe all'oggetto di spostarsi all'esterno del piano.
Ho provato una soluzione basata sulla risposta accettata here, ma non ha funzionato. Utilizzando un valore di profondità per unprojectPoint, se si trascina l'oggetto nella direzione +/- Z, l'oggetto non rimane troppo a lungo sotto il dito, ma si allontana invece da esso. È necessario che l'oggetto trascinato rimanga sotto il dito, indipendentemente da dove viene spostato nel piano XZ.
Per favore guarda la mia risposta per vedere cosa sto cercando di fare. – CAM