是否可以使用 SceneKit 的unprojectPoint将 2D 点转换为 3D 而没有深度值?我只需要在 XZ 平面中找到 3D 位置。Y 可以始终为 0 或任何值,因为我没有使用它。
我正在尝试为 iOS 8 Beta 执行此操作。
我对 JavaScript 和 Three.js (WebGL) 有类似的东西,如下所示:
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;
};
但我不知道如何将带有 unprojectVector 的部分翻译为 SceneKit。
我想要做的是能够仅在 XZ 平面中拖动对象。垂直轴 Y 将被忽略。
由于对象需要沿平面移动,一种解决方案是使用 hitTest 方法,但我认为对于每个触摸/拖动事件都执行此操作在性能方面不是很好。此外,它也不允许物体移出平面。
我已经尝试了基于此处接受的答案的解决方案,但没有奏效。为 unprojectPoint 使用一个深度值,如果在 +/-Z 方向上拖动对象,则对象不会在手指下停留太久,而是会远离手指。无论拖动的对象在 XZ 平面中的哪个位置移动,我都需要让拖动的对象保持在手指下方。