2

我看过很多帖子,人们希望将相机位置设置为屏幕位置。我的问题是如何做相反的事情。

我目前想要实现的是将“门”位置设置为屏幕的 %,此计算已准备就绪,并且我确实有最终的屏幕 X、Y (px) 位置。相机的当前 Z 偏移 = 250。

我发现这段代码可以将相机位置转换为屏幕位置:

var vector = projector.projectVector(door.position.clone(), camera);
vector.x = (vector.x + 1) / 2 * window.innerWidth;
vector.y = -(vector.y - 1) / 2 * window.innerHeight;

为了做反转,我尝试了这个,但没有给出我期望的结果:

var mouseX = ((perc.x) / window.innerWidth) * 2 - 1,
    mouseY = -((perc.y) / window.innerHeight) * 2 + 1;

var vector = new THREE.Vector3(mouseX, mouseY, 1);
projector.unprojectVector(vector, camera);
return vector.sub(camera.position).normalize()

我尝试了几种方法并尝试谷歌,但没有找到答案。

问:如何将屏幕位置转换为相机位置?

4

2 回答 2

2

使用一个大的不可见平面来定义门可以展开的方向,然后在平面上使用光线投射器来搜索门对象应该延伸到的位置。

于 2013-08-12T08:57:52.947 回答
2

好吧,正如 Gero3 所发布的那样,您要做的是创建一个覆盖所有可见相机区域的平面(类似于new THREE.PlaneGeometry(5000,5000);然后使用 raycaster 定位在该平面上协调的屏幕。

这是另一个类似问题的示例:

http://jsfiddle.net/PwWbT/

希望有帮助。

于 2013-08-13T16:25:23.030 回答