有没有办法找出场景渲染部分的宽度?
例如,如果我们有一个宽度为100的网格,但是使用一定级别的缩放进行渲染...如何计算在屏幕中渲染的网格部分的宽度?
我有一组块对象,我想设置透视相机,使其整个宽度完全可见(高度将太大-可以,我们将上下移动)。
我已经看到许多与此相关的问题,例如:
THREE.JS:获取相对于摄像机和屏幕上对象位置的对象大小
ThreeJS。如何实现ZoomALL并确保给定的框填充画布区域?
但是,它们似乎都无法完全满足我的需求:
我对高度不感兴趣,仅对宽度不感兴趣(它们不会相同-大小将是动态的,但我可以假定高度将大于宽度)
camera.position.z(或我估计的FOV)是未知的,所以我试图通过正确的方法来求解方程
(我对3D数学并不满意。在此先感谢!)
我想更新摄像机位置,以便平面世界位置与DIV 屏幕位置匹配.
我需要计算camera.position.z- 这样即使调整画布大小,飞机的面也会匹配DIV- 的大小.
this.computeZ = function(meshHandle, cameraHandle, faceHeight, targetHeight){
var face = meshHandle.geometry.vertices[2]
var vFOV = cameraHandle.fov * Math.PI / 180;
var vHeightPartial = 2 * Math.tan( vFOV / 2 );
var p1 = faceHeight * window.innerHeight;
var p2 = face.z * vHeightPartial;
var p3 = targetHeight * vHeightPartial;
var p4 = targetHeight * p2;
var p5 = p1 + p4;
var …Run Code Online (Sandbox Code Playgroud)