<!DOCTYPE html>
<html><head><meta charset="UTF-8"><title>Three框架</title><script src="../static/three.js-master/build/three.js"></script><style type="text/css">div#canvas-frame {border: none;cursor: pointer;width: 100%;height: 600px;background-color: #EEEEEE;}</style><script>var renderer;  // 渲染器function initThree() {width = window.innerWidth;  // 宽度height = window.innerHeight;  // 长度renderer = new THREE.WebGLRenderer({antialias : true  // 设置反锯齿
                });renderer.setSize(width, height);document.getElementById('canvas-frame').appendChild(renderer.domElement);renderer.setClearColor(0xFFFFFF, 1.0);}var camera;function initCamera() {camera = new THREE.PerspectiveCamera(45, width / height, 1, 10000);  // 透视投影摄像机// camera = new THREE.OrthographicCamera( window.innerWidth / - 2, window.innerWidth / 2, window.innerHeight / 2, window.innerHeight / - 2, 10, 1000 );  // 正投影摄像机camera.position.x = 0;  // 设置相机的坐标camera.position.y = 0;camera.position.z = 600;camera.up.x = 0;camera.up.y = 1;  // 设置相机的上为y轴方向camera.up.z = 0;camera.lookAt(0, 0, 0);  // 相机lookAt的点一定显示在屏幕的正中央:利用这点,我们可以实现物体移动时,我们可以一直跟踪物体,让物体永远在屏幕的中央
}var scene;  // 创建场景function initScene() {scene = new THREE.Scene();}var light;  // 创建光源function initLight() {light = new THREE.AmbientLight(0xFF0000);  // 环境光源light.position.set(100, 100, 200);scene.add(light);light = new THREE.PointLight(0x00FF00);  // 点光源light.position.set(0, 0,300);scene.add(light);}var cube;function initObject() {var geometry = new THREE.CylinderGeometry( 70,100,200);  // 创建几何体  宽度  长度  深度var material = new THREE.MeshLambertMaterial( { color:0xFFFFFF} );  // 创建外表和设置颜色var mesh = new THREE.Mesh( geometry,material);  // Mesh是一个类,用来生成物体mesh.position = new THREE.Vector3(0,0,0);scene.add(mesh);  // 加到场景
            }function threeStart() {initThree();initCamera();initScene();initLight();initObject();animation();}function animation(){changeFov();renderer.render(scene, camera);requestAnimationFrame(animation);  // 循环调用
            }function setCameraFov(fov){camera.fov = fov;camera.updateProjectionMatrix();}function changeFov(){var txtFov = document.getElementById("txtFov").value;var val = parseFloat(txtFov);setCameraFov(val);}</script></head><body οnlοad="threeStart();"><div id="canvas-frame"></div><div>Fov:<input type="text" value="45" id="txtFov"/>(0到180的值)</div></body>
</html>

附带three.js代码,点击下载

上面代码是透视投影摄像机的效果,如下图所示:

正投影摄像机

camera = new THREE.OrthographicCamera( window.innerWidth / - 2, window.innerWidth / 2, window.innerHeight / 2, window.innerHeight / - 2, 10, 1000 );

它基本上各个方向大小都相同,没有透视的效果。如下图所示:

转载于:https://www.cnblogs.com/aaronthon/p/10984138.html

three.js之正投影摄像机与透视投影摄像机的区别相关推荐

  1. Three.js - 摄像机的使用详解(透视投影摄像机、正交投影摄像机)

    一.两种摄像机的区别与比较 Three.js 库提供了两种不同的摄像机:透视投影摄像机和正交投影摄像机. 透视投影摄像机:这种摄像机的效果更贴近真实世界.也就是物体离摄像机越远,它们就会被渲染得越小. ...

  2. Three.js相机对象(正投影OrthographicCamera、透视投影PerspectiveCamera)

    Three.js相机对象(正投影OrthographicCamera.透视投影PerspectiveCamera) Three.js相机对象(正投影OrthographicCamera.透视投影Per ...

  3. unity中3dUI或者模型始终面向摄像机,跟随摄像机视角旋转丨视角跟随丨固定视角

    视角跟随 本脚本为一个目标跟随 unity中3dUI或者模型始终面向摄像机,跟随摄像机视角旋转 使用方法超级简单,对于一个资深的Ctrl+cv程序极为友好 不多讲解直接上代码 代码模块 public ...

  4. 家用监控百科:什么是WiFi摄像机,WiFi摄像机都有哪些种类

    什么是WiFi摄像机,WiFi摄像机都有哪些种类呢?今天速名网为大家带来家用监控摄像机的百科知识,关于WiFi摄像机很多人都不陌生,其实看名字就能知道大概的意思,就是连接WiFi之后,在手机或者电脑, ...

  5. Node.js event loop 和 JS 浏览器环境下的事件循环的区别

    Node.js  event loop 和 JS 浏览器环境下的事件循环的区别: 1.线程与进程: JS 是单线程执行的,指的是一个进程里只有一个主线程,那到底什么是线程?什么是进程? 进程是 CPU ...

  6. js中onload和jQuery中的ready区别

    js中onload和jQuery中的ready区别 window.onload必须等到页面内包括图片的所有元素加载完毕后才能执行. ------>不能写多个(如果有多个,只会执行一个) $(do ...

  7. Node.js: fs.readFile/writeFile 和 fs.createReadStream/writeStream 区别

    1. 先说说各自的用法: How do I read files in node.js? fs = require('fs'); fs.readFile(file, [encoding], [call ...

  8. css里面的let,js中let和var定义变量的区别

    javascript 严格模式 第一次接触let关键字,有一个要非常非常要注意的概念就是"javascript 严格模式",比如下述的代码运行就会报错: let hello = ' ...

  9. JS放在head和放在body中的区别

    JS放在head和放在body中的区别 在HTML body部分中的JavaScripts会在页面加载的时候被执行. 在HTML head部分中的JavaScripts会在被调用的时候才执行.一.区别 ...

最新文章

  1. C语言逆序字符串数组,【C语言】利用栈将数组中字符串逆序
  2. 虚拟化,可实现国产化替代
  3. Python标准库03 路径与文件 (os.path包, glob包)
  4. Flink从入门到精通100篇(十九)-基于 Flink 的大规模准实时数据分析平台的建设实践
  5. C语言Selection Sort选择排序的算法(附完整源码)
  6. lcd残影原理_为什么同样是高刷,OLED 可以比 LCD 优秀?
  7. 图像质量评价之数据库
  8. ubuntu13.10 编译时 关于链接xlib 库阶段出错的问题解决
  9. C#面试题(.net开发人员必备)
  10. 匿名函数php作用,深入理解PHP中的匿名函数
  11. 线上python课程一般多少钱-python培训班一般多少钱?一篇文章告诉你
  12. symantec linux版命令,symantec backup exec 2010 linux客户端的配置
  13. macbook键盘失灵_如何使用MacBook的键盘在所有设备上键入
  14. LAMP虚拟主机架设论坛
  15. CTF中字符长度限制下的命令执行 rce(7字符5字符4字符)汇总
  16. uniapp弹窗滚动阻止外部滚动
  17. 商标注册证的查询方法
  18. Linux下安装USB转串口驱动(PL2303)
  19. 联想thinkpad待机怎么唤醒_联想电脑睡眠无法唤醒_联想电脑睡眠怎么唤醒
  20. 网络安全学习笔记——蓝队实战攻防

热门文章

  1. 免签约微信支付宝个人收款接口pxpay v2.0.4
  2. java 一一对应的替换_SpringMVC的Controller是如何将参数和前端传来的数据一一对应的...
  3. java获取当前时间星期几_java怎么获取当前日期是星期几
  4. 苹果cmsv10自适应卡通动漫番剧模板
  5. 玩转POI、EasyExcel报表导入导出!
  6. 终于把英文版操作系统中文乱码问题解决了
  7. 8.8.8.8,Google推出免费DNS解析服务器
  8. c#.net多线程编程教学(2):Thread类
  9. 各类 HTTP 返回状态代码详解
  10. 128.最长连续序列