源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

Three.js学习之正交投影照相机

  • 时间:2021-07-03 00:05 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:Three.js学习之正交投影照相机
[b]前言 [/b] Three.js是一个3Djs库,webGL开源框架中比较优秀的一个。除了webGL以外,Three.js还提供了基于Canvas、SVG标签的渲染器,调试建议使用Chrome或者Firefox。 [b]1.照相机[/b]   图形学中的照相机定义了三维空间到二维屏幕的投影方式。   针对投影方式照相机分为正交投影照相机和透视投影照相机。 [b]2.两种相机的区别与适用范围[/b]   正交投影:  [img]http://files.jb51.net/file_images/article/201608/20168185004876.png?20167185032[/img]   透视投影:  [img]http://files.jb51.net/file_images/article/201608/20168185649521.png?2016718573[/img]   正交投影就像数学课上画的;而透视投影有一个基本点,就是远处的物体比近处的物体小,远大近小。   对于制图、建模软件通常使用正交投影;而对于其他大多数应用,通常使用透视投影。 [b]3.正交投影照相机[/b]   正交投影照相机的构造函数:
Three.OrthographicCamera(left,right,top,bottom,near,far)
  六个参数分别代表正交投影照相机拍摄到的六个面的位置。   其中,[b]near表示近平面与相机中心点的垂直距离[/b];[b]far表示远平面与相机中心点的垂直距离[/b]。  [img]http://files.jb51.net/file_images/article/201608/20168185804195.png?20167185815[/img]   若要保持照相机的横纵比例[b],(right-left)[/b]与[b](top-bottom)[/b]的比例需与canvas的宽高比例一致。   由图可见near与far的值应为正值,且[b]far>near[/b]。如果最后两个值是(0,0),也就是near和far值相同了,视景体深度没有了,整个视景体都被压成个平面了,就会显示不正确。 [b]4.正交投影照相机实例[/b]   源码:
<!DOCTYPE html>

<html>

  <head>

   <meta charset="UTF-8">

<title>3.js测试二</title>  

  </head>

  <body onload="init()">

    <canvas id="mainCanvas" width="400px" height="300px" ></canvas>

    <script type="text/javascript" src="js/three.min.js"></script>

    <script type="text/javascript">

      function init() {

        var renderer = new THREE.WebGLRenderer({

          canvas: document.getElementById('mainCanvas')

        });

        renderer.setClearColor(0x000000);

        var scene = new THREE.Scene();

        // 设置照相机

        var camera = new THREE.OrthographicCamera(-2, 2, 1.5, -1.5, 1, 10);

        camera.position.set(0, 0, 5);

        //camera.lookAt(new THREE.Vector3(0, 0, 0));

        scene.add(camera);

        // 创建立方体

        var cube = new THREE.Mesh(new THREE.CubeGeometry(1, 1, 1),

            new THREE.MeshBasicMaterial({

              color: 0xff0000,

              wireframe: true

            })

        );

        scene.add(cube);

        // render

        renderer.render(scene, camera);

      }

    </script>

  </body>

</html> 
  其中,[code]THREE.MeshBasicMaterial[/code](基础网格材质)的[b]wireframe[/b]属性如果为[b]true[/b],则将材质渲染成线框。 可以看到当前位置后面的边会与前面的完全重合:  [img]http://files.jb51.net/file_images/article/201608/20168190134268.png?2016719154[/img]   [b]4.1 改变视景体长宽比例[/b]   这里canvas的宽高比为4:3,照相机的水平距离为4,垂直距离为3,因此长宽比例保持不变(1:1)。   若将照相机的水平距离减小为2,
var camera = new THREE.OrthographicCamera(-1,1,1.5,-1.5,1,10);
  物体会被拉长:  [img]http://files.jb51.net/file_images/article/201608/20168190248518.png?2016719258[/img]   照相机的视野范围变窄了,导致正方体在视野范围内的横向比例增加了,因此表现为正方体变宽了。   [b]4.2 改变相机位置[/b]   例子中的相机位置是(0,0,5),由于照相机默认是面向z轴负方向放置的,所以能看到原点处的正方体。   将照相机的位置向右移动1个单位:
var camera = new THREE.OrthographicCamera(-2,2,1.5,-1.5,1,10);

camera.position.set(1,0,5);
  照相机面对着物体,所以照相机右移,所照的物体向左移:  [img]http://files.jb51.net/file_images/article/201608/20168190335316.png?2016719348[/img]   [b]4.3 改变视景体位置[/b]   将视景体设置的更靠右:
var camera = new THREE.OrthographicCamera(-1,3,1.5,-1.5,1,10);

camera.position.set(1,0,5);
  和右移照相机一样。  [img]http://files.jb51.net/file_images/article/201608/20168190425499.png?2016719441[/img]   [b]4.4 改变照相机角度[/b]
camera.position.set(4,-3,5);

camera.lookAt(new THREE.Vector3(0, 0, 0));
  但是现在照相机沿z轴负方向观察的,因此观察不到正方体,只看到一片黑。我们可以通过lookAt函数指定它看着原点方向:
camera.lookAt(new THREE.Vector3(0, 0, 0));
  注意,[code]lookAt[/code]函数接受的是一个[code]THREE.Vector3[/code]的实例,不要写成[code]camera.lookAt(0, 0, 0)[/code]   好了,以上就是Three.js学习之正交投影照相机的全部内容,希望给大家学习Three.js有所帮助,小编陆续还会更新关于Three.js的文章,请大家继续关注编程素材网。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部