THREE.js 正交相机纵横比必须与视口纵横比一致吗?

THREE.js Orthographic camera aspect must match viewport aspect?

请有人确认以下“假定约束”是否正确?...

为了将 three.js 正交相机渲染到视口(并避免失真),相机的平截头体左、右、下和顶平面必须定义正面平截头体面 (ocWidth, ocHeight),其方面ratio(width/height) 和viewport的纵横比一样吗?

在下面的示例中,首先设置相机宽度和高度,然后视口高度受所需视口宽度和给定相机纵横比的约束。 (另一种方法是先设置视口宽度和高度,然后将相机高度限制为所需的相机宽度和给定的视口纵横比。)

//Orthographic Camera

ocWidth  = 99000; //... World Units
ocHeight = 33000; //... World Units

var myCamera = new THREE.OrthographicCamera( 
   ocWidth  / - 2, ocWidth  / 2, 
   ocHeight / 2, ocHeight / - 2,
   NEAR = 1, FAR = 1000 );
 
oc_aspect_ratio = ocWidth / ocHeight; 

//Viewport

vp_aspect_ratio = oc_aspect_ratio; 
vpXwidth = 800; //... pixels
vpYheight =  vpXwidth /vp_aspect_ratio;  //... pixels, to ensure no distortion

vpXmin = -vpXwidth  /2; vpXmax = vpXwidth  /2; //... pixels
vpYmin = -vpYheight /2; vpYmax = vpYheight /2; //... pixels
        
myRenderer.setViewport( vpXmin, vpYmin, vpXwidth, vpYheight );  

因此(通常)RENDERER 的宽度和高度与正交相机无关(例外情况是有效视口填满整个渲染器,如果没有显式定义视口,这是默认设置. 在这种情况下,渲染器纵横比必须与相机纵横比匹配)。

我学过

如果您使用正交相机渲染场景,并且希望防止渲染场景失真,则需要设置视口纵横比以匹配相机视锥体的纵横比。