Javascript 如何定位相机,使对象在屏幕上始终具有相同的像素宽度和高度?
我有一个问题我不知道如何去解决,也许有人可以给我一个如何解决它的提示 我希望相机被定位在一个z索引,这将导致立方体显示在完全相同的像素宽度和高度,无论窗口的大小或纵横比是什么。立方体的z位置为0。摄像机需要放在后面看这个立方体 因此,当用户看到屏幕显示时,用户应该看到立方体在屏幕上具有完全相同的像素宽度和高度。现在我猜相机的z位置一定是窗口宽度、高度、纵横比和常数的函数 如何计算A、B、C和D?我怀疑这是一个几何问题,但我不知道如何着手解决它。也许我需要添加一个约束,即对象应该具有完全相同的宽度和高度(像素匹配100像素宽和100像素高)Javascript 如何定位相机,使对象在屏幕上始终具有相同的像素宽度和高度?,javascript,math,three.js,geometry,Javascript,Math,Three.js,Geometry,我有一个问题我不知道如何去解决,也许有人可以给我一个如何解决它的提示 我希望相机被定位在一个z索引,这将导致立方体显示在完全相同的像素宽度和高度,无论窗口的大小或纵横比是什么。立方体的z位置为0。摄像机需要放在后面看这个立方体 因此,当用户看到屏幕显示时,用户应该看到立方体在屏幕上具有完全相同的像素宽度和高度。现在我猜相机的z位置一定是窗口宽度、高度、纵横比和常数的函数 如何计算A、B、C和D?我怀疑这是一个几何问题,但我不知道如何着手解决它。也许我需要添加一个约束,即对象应该具有完全相同的宽度
var aspectRatio = window.innerWidth / window.innerHeight;
var camera = new PerspectiveCamera( 60.0, aspectRatio, 1.0, 10000.0 );
var A = 1.0;
var B = 1.0;
var C = 1.0;
var D = 1.0;
camera.position.z = A * window.innerWidth + B * window.innerHeight +
(C * aspectRatio) + D;
var geometry = new CubeGeometry( 100.0, 100.0, 0.0001 );
更新后,我通过反复试验解决了这个问题 我不懂这个的几何学,也不懂这个的数学,但我注意到物体的大小取决于窗户的高度,而不是窗户的宽度。同样,我不知道为什么,但是当我调整高度时,对象变大或变小,但当我调整宽度时,对象保持不变 所以我决定高度很可能是决定函数的一个元素,然后我通过改变值进行反复试验,直到得到正确的大小,100×100像素的大小。然后我改变了高度,它的大小保持不变。我很高兴我有了这个结果
num A = 0.0;
num B = -0.867;
num C = 0.0;
num D = 0.0;
在您的情况下,更可能依赖于较小的窗口大小轴!!!因为纵横比方程通常在不同的情况下有所不同:
宽度>高度
width
,:)
。当然,只需调整窗口的大小,使其高度大于宽度,然后看看会发生什么
顺便说一句。后面的数学只是简单的三角形数学,如下所示:
一个角度为90度,第二个角度为90度
atan (h1/z1) = atan (h0/z0)
h1/z1 = h0/z0 <- triangle similarity
z1 = z0*h1/h0 <- this is what you want
请参阅“我不理解这个的几何结构或数学…”:这是因为透视摄影机的第一个参数是垂直视野。看。已经解决了,但无论如何,添加了一些解释的答案,所以请检查它。谢谢你解释数学。
z1' = (z0*h1/h0)+h1