照相机又分为正交投影照相机与透视投影照相机

举个简单的例子来说明正交投影与透视投影照相机的区别。使用透视投影照相机获得的结果是类似人眼在真实世界中看到的有“近大远小”的效果(如下图中的(a));

而使用正交投影照相机获得的结果就像我们在数学几何学课上老师教我们画的效果,对于在三维空间内平行的线,投影到二维空间中也一定是平行的(如下图中的(b))。

(a)透视投影,(b)正交投影

那么,你的程序需要正交投影还是透视投影的照相机呢?

一般说来,对于制图、建模软件通常使用正交投影,这样不会因为投影而改变物体比例;而对于其他大多数应用,通常使用透视投影,因为这更接近人眼的观察效果。当然,照相机的选择并没有对错之分,你可以更具应用的特性,选择一个效果更佳的照相机。

正交投影照相机(Orthographic Camera)设置起来较为直观,它的构造函数是:

THREE.OrthographicCamera(left, right, top, bottom, near, far)

这六个参数分别代表正交投影照相机拍摄到的空间的六个面的位置,这六个面围成一个长方体,我们称其为视景体(Frustum)。只有在视景体内部(下图中的灰色部分)的物体才可能显示在屏幕上,而视景体外的物体会在显示之前被裁减掉。

为了保持照相机的横竖比例,需要保证(right - left)(top - bottom)的比例与Canvas宽度与高度的比例一致。

nearfar都是指到照相机位置在深度平面的位置,而照相机不应该拍摄到其后方的物体,因此这两个值应该均为正值。为了保证场景中的物体不会因为太近或太远而被照相机忽略,一般near的值设置得较小,far的值设置得较大,具体值视场景中物体的位置等决定。

实例说明


下面,我们通过一个具体的例子来解释正交投影照相机的设置。

基本设置

设置照相机:

var camera = new THREE.OrthographicCamera(-2, 2, 1.5, -1.5, 1, 10);
camera.position.set(0, 0, 5);
scene.add(camera);

在原点处创建一个边长为1的正方体,为了和透视效果做对比,这里我们使用wireframe而不是实心的材质,以便看到正方体后方的边:

var cube = new THREE.Mesh(new THREE.CubeGeometry(1, 1, 1),
new THREE.MeshBasicMaterial({
color: 0xff0000,
wireframe: true
})
);
scene.add(cube);
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<script type="text/javascript" src="libs/three.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(); // camera
// canvas size is 400x300
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))通过lookAt函数指定它看着原点方向,这样我们就能过仰望正方体了;
//注意,lookAt函数接受的是一个THREE.Vector3的实例,因此千万别写成camera.lookAt(0, 0, 0),否则非但不能得到理想的效果,而且不会报错,使你很难找到问题所在。
scene.add(camera); // a cube in the scene
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>
</head> <body onload="init()">
<canvas id="mainCanvas" width="400px" height="300px" ></canvas>
</body>
</html>
 

得到的效果是:

我们看到正交投影的结果是一个正方形,后面的边与前面完全重合了,这也就是正交投影与透视投影的区别所在。

长宽比例

这里,我们的Canvas宽度是400px,高度是300px,照相机水平方向距离4,垂直方向距离3,因此长宽比例保持不变。为了试验长宽比例变化时的效果,我们将照相机水平方向的距离减小为2

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

得到的结果是水平方向被拉长了:

[+]查看原图

照相机位置

接下来,我们来看看照相机位置对渲染结果的影响。在之前的例子中,我们将照相机设置在(0, 0, 5)位置,而由于照相机默认是面向z轴负方向放置的,所以能看到在原点处的正方体。现在,如果我们将照相机向右移动1个单位:

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

得到的效果是物体看上去向左移动了:

[+]查看原图

仔细想一下的话,这也不难理解。就好比你人往右站了,看起来物体就相对往左移动了。

那么,正交投影照相机在设置时,是否需要保证leftright是相反数呢?如果不是,那么会产生什么效果呢?下面,我们将原本的参数(-2, 2, 1.5, -1.5, 1, 10)改为(-1, 3, 1.5, -1.5, 1, 10),即,将视景体设置得更靠右:

var camera = new THREE.OrthographicCamera(-1, 3, 1.5, -1.5, 1, 10);
camera.position.set(0, 0, 5);

得到的结果是:

[+]查看原图

细心的读者已经发现,这与之前向右移动照相机得到的效果是等价的。

换个角度看世界

到现在为止,我们使用照相机都是沿z轴负方向观察的,因此看到的都是一个正方形。现在,我们想尝试一下仰望这个正方体。我们已经学会设置照相机的位置,不妨将其设置在(4, -3, 5)处:

camera.position.set(4, -3, 5);

但是现在照相机沿z轴负方向观察的,因此观察不到正方体,只看到一片黑。我们可以通过lookAt函数指定它看着原点方向:

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

这样我们就能过仰望正方体啦:

[+]查看原图

不过一定要注意,lookAt函数接受的是一个THREE.Vector3的实例,因此千万别写成camera.lookAt(0, 0, 0),否则非但不能得到理想的效果,而且不会报错,使你很难找到问题所在。

  <!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Three框架</title>
<script src="libs/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 = document.getElementById('canvas-frame').clientWidth;
height = document.getElementById('canvas-frame').clientHeight;
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;
camera.up.z = 0;
camera.lookAt({
x : 0,
y : 0,
z : 0
});
} 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.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 onload="threeStart();">
<div id="canvas-frame"></div>
<div>
Fov:<input type="text" value="45" id="txtFov"/>(0到180的值)
</div>
</body>
</html>

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABFsAAAIPCAIAAAAjDUaEAAAgAElEQVR4nO3dd5TuVX3v8R2R3gUpIlWRXlR6HXoHEZAu0nuRYk3caGLUGIMxStQQMZYYW9RoNNbBihVU7AVUVLBETW7x/nP93j+2v+fuc2bmmWdmnmfafr0WfyRHOMy4xrXOZ8183zsFAABAq9JCfwAAAAALxiICAADaZREBAADtsogAAIB2WUQAAEC7LCIAAKBdFhEAANAuiwgAAGiXRQQAALTLIgIAANplEQEAAO2yiAAAgHZZRAAAQLssIgAAoF0WEQAA0C6LCAAAaJdFBAAAtMsiAgAA2mURAQAA7bKIAACAdllEAABAuywiAACgXRYRAADQLosIAABol0UEAAC0yyICAADaZREBAADtsogAAIB2WUQAAEC7LCIAAKBdFhEAANAuiwgAAGiXRQQAALTLIgIAANplEQEAAO2yiAAAgHZZRAAAQLssIgAAoF0WEQAA0C6LCAAAaJdFBAAAtMsiAgAA2mURAQAA7bKIAACAdllEAABAuywiAACgXRYRAADQLosIAABol0UEAAC0yyICAADaZREBAADtsogAAIB2WUQAAEC7LCIAAKBdFhEAANAuiwgAAGiXRQQAALTLIgIAANplEQEAAO2yiAAAgHZZRAAAQLssIgAAoF0WEQAA0C6LCAAAaJdFBAAAtMsiAgAA2mURAQAA7bKIAACAdllEAABAuywiAACgXRYRAADQLosIAABol0UEAAC0yyICAADaZREBAADtsogAAIB2WUQAAEC7LCIAAKBdFhEAANAuiwgAAGiXRQQAALTLIgIAANplEQEAAO2yiAAAgHZZRAAAQLssIgAAoF0WEQAA0C6LCAAAaJdFBAAAtMsiAgAA2mURAQAA7bKIAACAdllEAABAuywiAACgXRYRAADQLosIAABol0UEAAC0yyICAADaZREBAADtsogAAIB2WUQAAEC7LCIAAKBdFhEAANAuiwgAgFEaH48X5XhxjpfmeHmOV+R4ZY6/y3F7jtfluCPHnTnelOMtOd6W4x053p3jvTnen+ODOT6c4yM5PprjYzk+nuMTOcZz3JXjkzk+lePTOT6T47M5Ppfj7hyfz/GFHF/M8aUcX8lxT457c3w1x9dyfD3HfTm+keObOb6V49s5vpPjuzm+l+P7OX6Q44c57s/x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kePjOT6W4yM5/iPHB3N8IMf7crwnx7tzvDPH23O8Lcdbc7w5xxtzvCHHHTlen+O1OW7P8eocr8pxW45X5Hh5jpfleEmOF+f48xwvzAv89TwwiwgAAGiXRQQAALTLIgIAANplEQEAAO2yiAAAgHZZRAAAQLssIgAAoF0WEQAA0C6LCAAAaJdFBAAAtMsiAgAA2mURAQAA7bKIAACAdllEAABAuywiAACgXRYRAADQLosIAABol0UEAAC0yyICAADaZREBAADtsogAAIB2WUQAAEC7LCIAAKBdFhEAANAuiwgAAGiXRQQAALTLIgIAANplEQEAAO2yiAAAgHZZRAAAQLssIgAAoF0WEQAA0C6LCAAAaJdFBAAAtMsiAgAA2mURAQAA7bKIAACAdllEAABAuywiAACgXRYRAADQLosIAABol0UEAAC0yyICAADaZREBAADtsogAAIB2WUQAAEC7LCIAAKBdFhEAANAuiwgAAGiXRQQAALTLIgIAANplEQEAAO2yiAAAgHZZRAAAQLssIgAAoF0WEQAA0C6LCAAAaJdFBAAAtMsiAgAA2mURAQAA7bKIAACAdllEAABAuywiAACgXRYRAADQLosIAABol0UEAAC0yyICAADaZREBAADtsogAAIB2WUQAAEC7LCIAAKBdFhEAANAuiwgAAGiXRQQAALTLIgIAANplEQEAAO2yiAAAgHZZRAAAQLssIgAAoF0WEQAA0C6LCAAAaJdFBAAAtMsiAgAA2mURAQAA7bKIAACAdllEAABAuywiAACgXRYRAADQLosIAABol0UEAAC0yyICAADaZREBAADtsogAAIB2WUQAAEC7LCIAAKBdFhEAANAuiwgAAGiXRQQAALTLIgIAANplEQEAAO2yiAAAgHZZRAAAQLssIgAAoF0WEQAA0C6LCAAAaJdFBAAAtMsiAgAA2mURAQAA7bKIAACAdllEAABAuywiAACgXRYRAADQLosIAABol0UEAAC0yyICAADaZREBAADtsogAAIB2WUQAAEC7LCIAAKBdFhEAANAuiwgAAGiXRQQAALTLIgIAANplEQEAAO2yiAAAgHZZRAAAQLssIgAAoF0WEQAA0C6LCAAAaJdFBAAAtMsiAgAA2mURAQAA7bKIAACAdllEAABAuywiAACgXRYRAADQLosIAABol0UEAAC0yyICAADaZREBAADtsogAAIB2WUQAAEC7LCIAAKBdFhEAANAuiwgAAGiXRQQAALTLIgIAANplEQEAAO2yiAAAgHZZRAAAQLssIgAAoF0WEQAA0C6LCAAAaJdFBAAAtMsiAgAA2mURAQAA7bKIAACAdllEAABAuywiAACgXRYRAADQLosIAABol0UEAAC0yyICAADaZREBAADtsogAAIB2WUQAAEC7LCIAAKBdFhEAANAuiwgAAGiXRQQAALTLIgIAANplEQEAAO2yiAAAgHZZRAAAQLssIgAAoF0WEQAA0C6LCAAAaJdFBAAAtMsiAgAA2mURAQAA7bKIAACAdllEAABAuywiAACgXRYRAADQLosIAABol0UEAAC0yyICAADaZREBAADtsogAAIB2WUQAAEC7LCIAAKBdFhEAANAuiwgAAGiXRQQAALTLIgIAANplEQEAAO2yiAAAgHZZRAAAQLssIgAAoF0WEQAA0C6LCAAAaJdFBAAAtMsiAgAA2mURAQAA7bKIAACAdllEAABAuywiAACgXRYRAADQLosIAABol0UEAAC0yyICAADaZREBAADtsogAAIB2WUQAAEC7LCIAAKBdFhEAANAuiwgAAGiXRQQAALTLIgIAANplEQEAAO2yiAAAgHZZRAAAQLssIgAAoF0WEQAA0C6LCAAAaJdFBAAAtMsiAgAA2mURAQAA7bKIAACAdllEAABAuywiAACgXRYRAADQLosIAABol0UEAAC0yyICAADaZREBAADtsogAAIB2WUQAAEC7FmYR3ffgHy65/eHn3XGfv1r+65LbH77vwT8syFcgAAAUC7OI3nr3H577D19fkH81i8fz7rjvLZ/7v6P4nVMa1Rf2xN952n/XSn/D6D42AABmwSJiwUy6iPoPhjS1wX+TuRjdIrKUAAAWhEXEgpm4iGa0Cvr8zSNaF5P+toMsogUfcgAATKXfnyn7/NFtjiwiYsIimmpvDL5Der844D/S58t70rky6f8i+v/PZKbfUzKKAADm2Qz+cDbEP6tNtoh+P379pukldw/rX8HiN+0immrh1P/vpP/3VGNmqt9kkN9n0r9/2v+NWEQAAIvcQH84G/qf0iYuot/f+5J9U7KImlIvommXQ5+vxon/0SDfIxrw9+//69P+nlN9K6nP912NIgCA+TR/i6j+I+CERfTAnadcfvkFFlFbZrGIJt0VvS+teV5Eg3zMgwy5AX8dAIBRGLTrNe1/tNIfTCf+U30W0UPvOfPMtz1090ssorbM7ntEk/7KLBbRVH//XJZS/w9p0hU3yMcJAMDozOZ7RDP9o+FEKyyi349ff+ht90ZYRK0Z4iJa6VcGXEQxRUFhqt9zqj0z8d/b5//o//H0+XUAAEZh4RfRvbcd8+y7fx8WUXsWfBEN5XtE/f+9vkcEALDIzSZ7Ne0fDaf9I93/X0QP3HnK5R/6bURYRO2ZdVlhqmkxo0U00+Uz7ULr/1n4HhEAwOK0wIvoobedsvKfbU9520MDfuwscf3r26P+HtH8L6JBvkdkDgEAzLMhL6L+/1TvP5r0hVbfI2rNrN8j6vOLg//90w77qX5xRh/STL9HZBEBAMyzfn+m7H/qMNXfYBExoJUWUUwxGwb5Ipx27Uz6d/b/Mu7/m4xiEZlDAADzb2H+BDbpIqI1ExdRTLcKBtwko5gW035PaaqPZ1qT/v4AAMwPi4gFM+kimta0y2FBpkWfb2TN80cCAMCMWEQsmNktIgAAGCKLiAVjEQEAsOAsIhaMRQQAwIJbmEV034N/uOT2h5//j9/wV8t/XXL7w/c9+IcF+QoEAIBiwc6+73vwD2+9219N/2UOAQCw4ISwAACAdllEAABAuywiAACgXRYRAADQLosIAABol0UEAAC0yyICAADaZREBAADtsogAAIB2WUQAAEC7LCIAAKBdFhEAANAuiwgAAGiXRQQAALTLIgIAANplEQEAAO2yiAAAgHZZRAAAQLssIgAAoF0WEQAA0C6LCAAAaJdFBAAAtMsiAgAA2mURAQAA7bKIAACAdllEAABAuywiAACgXRYRAADQLosIAABol0UEAAC0yyICAADaZREBAADtsogAAIB2WUQAAEC7LCIAAKBdFhEAANAuiwgAAGiXRQQAALTLIgIAANr1/wAk0fniXihjoQAAAABJRU5ErkJggg==" alt="" />

three.js正交投影照相机的更多相关文章

  1. Three.js基础探寻二——正交投影照相机

    本篇主要介绍照相机中的正交投影照相机. 第一篇传送门:Three.js基础探寻一 1.照相机 图形学中的照相机定义了三维空间到二维屏幕的投影方式. 针对投影方式照相机分为正交投影照相机和透视投影照相机 ...

  2. three.js透视投影照相机

    透视投影照相机(Perspective Camera)的构造函数是: THREE.PerspectiveCamera(fov, aspect, near, far) 让我们通过一张透视照相机投影的图来 ...

  3. Three.js基础探寻三——透视投影照相机

    本篇主要介绍Three.js照相机中的透视投影照相机. 上一篇:正交投影照相机 5.透视投影照相机构造函数 透视投影照相机(Perspective Camera)的构造函数是: THREE.Persp ...

  4. 系列博文-Three.js入门指南(张雯莉)-照相机

    照相机就是这样一个抽象,它定义了三维空间到二维屏幕的投影方式,用“照相机”这样一个类比,可以使我们直观地理解这一投影方式.而针对投影方式的不同,照相机又分为正交投影照相机与透视投影照相机.我们需要为自 ...

  5. 深入理解Three.js中透视投影照相机PerspectiveCamera

    前言 在开始正式讲解透视摄像机前,我们先来理理three.js建模的流程.我们在开始创建一个模型的时候,首先需要创建我们模型需要的物体,这个物体可以是three.js中已经为我们封装好的,比如正方体, ...

  6. three.js加载obj模型

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xht ...

  7. three.js材质

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xht ...

  8. 【前端】Three.js

    Three.js 基本概念 渲染器(Renderer) 渲染器将和Canvas元素进行绑定 场景(Scene) 在Three.js中添加的物体都是添加到场景中的,因此它相当于一个大容器.一般说,场景里 ...

  9. three.js 相关概念

    1.什么是three.js? Three.js 是一个 3D JavaScript 库.Three.js 封装了底层的图形接口,使得程序员能够在无需掌握繁冗的图形学知识的情况下,也能用简单的代码实现三 ...

随机推荐

  1. 如何解决exe4j生成exe文件后弹出提示信息

    使用exe4j生成exe文件时会提示以上一段信息,这个主要是没有注册导致的,在welcome to exe4j的右下角有一个注册信息的地方,去找个注册码,就OK了. 通用注册码:L-g782dn2d- ...

  2. eclipse maven tomcat7 热部署

    .配置tomcat a.配置jdk b.CATALINA_HOME=c:\tomcat CATALINA_BASE=c:\tomcat .tomcat配置密码 C:\Program Files\oth ...

  3. DO语句与SELECT语句,HANDLER语句

    DO语句,只执行语句不返回结果:SELECT 既执行语句也返回结果. HANDLER的效率会更好. HANDLER 语句比SELECT 语句更快: 1,HANDLER只需OPEN一次,能重用,不须每次 ...

  4. *** Assertion failure in -[UIApplication _runWithMainScene:transitionContext iOS9.1闪退问题解决

    错误原因在于 AppDelegate 中 didFinishLaunchingWithOptions 结束前 未定义 rootViewController,Xcode7规定必须要有rootViewCo ...

  5. NYOJ题目113字符串替换

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAr4AAAHvCAIAAAA930vtAAAgAElEQVR4nO3dPVLjysIG4G8T5CyE2A ...

  6. AIX 配置网卡

    ifconfig en0 10.1.1.100 netmask 255.255.255.0 alias

  7. ASP.NET MVC中Controller返回值类型ActionResult

    1.返回ViewResult视图结果,将视图呈现给网页 public class TestController : Controller { //必须存在Controller\Test\Index.c ...

  8. RecyclerView导入依赖包

    1. eclipse 上的导入: 如下进入Android SDK的如下路径, \android-sdk\extras\android\m2repository\com\android\support\ ...

  9. 【JAVA常用类演示】

     一.java.lang.System类. public final class Systemextends Object 该类包含一些有用的类字段和方法.它不能被实例化. 在 System 类提供的 ...

  10. 利用YaHoo YUI实现Javascript CSS 压缩 分类: C# 2014-07-13 19:07 371人阅读 评论(0) 收藏

    网站优化时,往往需要对js文件,css文件进行压缩,以达到减少网络传输数据,减少网页加载时间:利用YaHoo的YUI可以实现Javascript,CSS,压缩,包括在线的js压缩和程序压缩,发现C#也 ...