我有一个位置为 (x,y,z) 的 3D 对象。如何计算该对象的屏幕位置(x,y)?
我已经搜索过它,一个解决方案是我必须找出投影矩阵,然后将 3D 位置点乘以该矩阵,将其投影到某个 2D 观看表面(计算机屏幕)上。但我不知道如何在 Three.js 中找到这个矩阵。
我尝试像这样的转换函数,但它给出了错误的结果
function Point3DToScreen2D(point3D){
var screenX = 0;
var screenY = 0;
var inputX = point3D.x - camera.position.x;
var inputY = point3D.y - camera.position.y;
var inputZ = point3D.z - camera.position.z;
var aspectRatio = renderer.domElement.width / renderer.domElement.height;
screenX = inputX / (-inputZ * Math.tan(camera.fov/2));
screenY = (inputY * aspectRatio) / (-inputZ * Math.tan(camera.fov / 2));
screenX = screenX * renderer.domElement.width;
screenY = renderer.domElement.height * (1-screenY);
return {x: screenX, y: screenY};
}
预先感谢。
对我来说这个函数有效(Three.js 版本 69):
function createVector(x, y, z, camera, width, height) {
var p = new THREE.Vector3(x, y, z);
var vector = p.project(camera);
vector.x = (vector.x + 1) / 2 * width;
vector.y = -(vector.y - 1) / 2 * height;
return vector;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)