2017-03-17 24 views

回答

0

正如@gaitat说,THREE.OrthographicCamera你需要调整它的视锥的尺寸,以适应你要放大物体的大小。

简单明了的事情是使用geometry.boundingSphere和内置照相机topleftbottomup。越容易的事情将是使用camera.zoom做的工作,即

// center camera on the object (ellipse in this case) 
var boundingSphere = ellipse.geometry.boundingSphere 

// aspect equals window.innerWidth/window.innerHeight 
if(aspect > 1.0) 
{ 
    // if view is wider than it is tall, zoom to fit height 
    camera.zoom = viewHeight/(boundingSphere.radius * 2) 
} 
else 
{ 
    // if view is taller than it is wide, zoom to fit width 
    camera.zoom = viewWidth/(boundingSphere.radius * 2) 
} 

// Don't forget this 
camera.updateProjectionMatrix() 

这将设置缩放级别,以使得对象(在此情况下,椭圆形)完全适合您的相机的视锥。

但是,你也将不得不要么居中对象上的摄像头:

  • 旋转的摄像头,这样的BoundingSphere所中心最终指向BoundingSphere所中心
  • 平移相机在相机的截锥轴上

由于翻译相机比较容易,所以两者都是比较容易的,THREE.OrthographicCamera主要用来显示你的s的2D表示cene(即对于UI,或者采取在平行于摄像机平面的地方一些其他的东西),这里是代码来做到这一点:

camera.position.copy(boundingSphere.center) 
// The number here is more or less arbitrary 
// as long as all objects that need to be visible 
// end up within the frustum 
camera.position.z = 15 

这是假设你的对象是在平行于XY平面,而且一些平面摄像机定位为平行于Z轴(因为它是默认情况下)。

这里是codepen,它显示了XY平面中的小网格和椭圆。在鼠标按下相机将放大到椭圆形,并在鼠标弹起时它会回到它的原始状态:

https://codepen.io/anon/pen/aJEzew

0

正交相机的定义包括leftright,topbottom平截头体飞机,它们实际上定义了相机的边界。所以你需要将你的物体的边界框与你的相机边界相匹配。对象的边界框的长度应小于或等于right-left,对象的边界框的长度应小于或等于bottom-top

如果您通过这些长度的比例缩放您的物体,则该物体应该适合您的相机。