有几个关于在Three.js中反投影的优秀堆栈问题(1,2),即如何将浏览器中的(x,y)鼠标坐标转换为Three.js画布空间中的(x,y,z)坐标。大多数情况下,它们遵循以下模式:
var elem = renderer.domElement,
boundingRect = elem.getBoundingClientRect(),
x = (event.clientX - boundingRect.left) * (elem.width / boundingRect.width),
y = (event.clientY - boundingRect.top) * (elem.height / boundingRect.height);
var vector = new THREE.Vector3(
( x / WIDTH ) * 2 - 1,
- ( y / HEIGHT ) * 2 + 1,
0.5
);
projector.unprojectVector( vector, camera );
var ray = new THREE.Ray( camera.position, vector.subSelf( camera.position ).normalize() );
var intersects = ray.intersectObjects( scene.children );
我一直在尝试做相反的事情 - 而不是从“屏幕到世界”空间,而是从“世界到屏幕”空间。如果我知道Three.js中对象的位置,如何确定它在屏幕上的位置?
似乎没有任何已发布的解决此问题的方法。这里有一个关于此问题的另一个问题,但作者声称已经用一个对我无效的函数解决了这个问题。他们的解决方案不使用投影光线,并且我很确定,由于2D到3D使用了unprojectVector(),所以3D到2D的解决方案将需要projectVector()。
还有这个Github上的问题。
感谢任何帮助。