THREE.js正交相机方面必须与视口方面相匹配?

时间:2015-03-14 17:21:51

标签: three.js viewport orthographic

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

为了将三个正交相机渲染到视口(并避免失真),相机的平截头体左,右,底和顶平面必须定义正面平截头体面(ocWidth,ocHeight),其纵横比(宽度/ height)与视口的宽高比相同吗?

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

//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的宽度和高度与正交相机无关(例外情况是有效视口填充整个渲染器时,如果没有明确定义视口,则默认为默认值。在这种情况下,渲染器纵横比必须与相机纵横比匹配。)

我已经学习了

1 个答案:

答案 0 :(得分:2)

如果使用正交相机渲染场景,并且希望防止渲染场景失真,则需要将视口宽高比设置为与相机的宽高比相匹配。