【问题标题】:THREE.JS: Get object size with respect to camera and object position on screenTHREE.JS:获取相对于相机和屏幕上对象位置的对象大小
【发布时间】:2013-02-26 04:52:14
【问题描述】:

我是 3D 编程的新手,我确实开始使用 Three.JS 从 WebGL 探索 3D 世界。

我想在更改 camera.position.z 和对象的“Z”位置时预先确定对象大小。

例如: 我有一个尺寸为 100x100x100 的立方体网格。

cube = new THREE.Mesh(
        new THREE.CubeGeometry(100, 100, 100, 1,1,1, materials),     
        new THREE.MeshFaceMaterial()
    );

和长宽比为1.8311874

的凸轮
camera = new THREE.PerspectiveCamera( 45, aspect_ratio, 1, 30000 );

我想知道屏幕上那个立方体对象的大小(2D 宽度和高度),

camera.position.z = 750;
cube.position.z = 500;

有什么方法可以找到/预先确定它吗?

【问题讨论】:

    标签: three.js


    【解决方案1】:

    您可以使用Three.js - Width of view 中解释的公式计算距相机给定距离的可见高度。

    var vFOV = camera.fov * Math.PI / 180;        // convert vertical fov to radians
    var height = 2 * Math.tan( vFOV / 2 ) * dist; // visible height
    

    在你的情况下,相机 FOV 是 45 度,所以

    vFOV = PI/4. 
    

    (注意:在three.js中,相机视野FOV是垂直的,而不是水平的。)

    相机到立方体的正面(重要!)的距离是 750 - 500 - 50 = 200。因此,在您的情况下,可见高度是

    height = 2 * tan( PI/8 ) * 200 = 165.69.
    

    由于立方体的正面是100 x 100,所以立方体表示的可见高度的分数是

    fraction = 100 / 165.69 = 0.60.
    

    因此,如果您知道画布高度(以像素为单位),那么立方体的高度(以像素为单位)就是该值的 0.60 倍。

    我提供的链接显示了如何计算可见宽度,因此您可以根据需要以类似的方式进行计算。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-11
      • 1970-01-01
      • 2020-10-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多