代码之家  ›  专栏  ›  技术社区  ›  steveOw

THRE.js正交相机外观必须与视口外观匹配?

  •  0
  • steveOw  · 技术社区  · 11 年前

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

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

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

    //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 回复  |  直到 11 年前
        1
  •  2
  •   WestLangley    11 年前

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