gpt4 book ai didi

three.js - THREE.JS:获取相对于摄像机和屏幕上对象位置的对象大小

转载 作者:行者123 更新时间:2023-12-03 12:33:30 26 4
gpt4 key购买 nike

我是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 );

我想知道屏幕上那个立方体对象的大小(二维宽度和高度),
camera.position.z = 750;
cube.position.z = 500;

有什么办法可以找到它/预定它吗?

最佳答案

您可以使用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.

因此,如果您知道以像素为单位的 Canvas 高度,那么以像素为单位的多维数据集的高度就是该值的0.60倍。

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

关于three.js - THREE.JS:获取相对于摄像机和屏幕上对象位置的对象大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15331358/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com