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

举个简单的例子来说明正交投影与透视投影照相机的区别。使用透视投影照相机获得的结果是类似人眼在真实世界中看到的有“近大远小”的效果(如下图中的(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. ios waxpatch lua语法

    Wax Lua 使用方法 说一下 Wax 的特点,它支持你在脚本里使用任何 OC 的类,同样也支持你创建一个类. 使用一个类时你会这样使用: 1 2 NSString -- Returns the N ...

  2. September 24th 2016 Week 39th Saturday

    The worst solitude is to be destitute of sincere friendship. 最大的孤独莫过于没有真诚的友谊. I walk slowly, but I n ...

  3. 关于 UICollectionViewCell 的一些陷阱

    如果直接使用 UICollectionViewCell 的自带属性 selected 来自定义一些样式,如: - (void)setSelected:(BOOL)selected { [super s ...

  4. iOS 控制屏幕旋转

    在你想支持横竖屏的viewController里面重写两个方法: 1 2 3 4 5 6 7 8 9 10 11 // 支持设备自动旋转 - (BOOL)shouldAutorotate {      ...

  5. 瞧一瞧迷一般的SQLDA

    With static SQL, host variables used in embedded SQL statements are known at application compile tim ...

  6. Tomcat在Linux上的安装与配置

    以下使用的Linux版本为: Redhat Enterprise Linux 6.5 x86_64,Tomcat版本为tomcat-7.0.54. 1.下载JDK与Tomcat.    jdk下载地址 ...

  7. ListView + PopupWindow实现滑动删除

    原文:ListView滑动删除 ,仿腾讯QQ(鸿洋_) 文章实现的功能是:在ListView的Item上从右向左滑时,出现删除按钮,点击删除按钮把Item删除. 看过文章后,感觉没有必要把dispat ...

  8. Bootstrap – 1.认识

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...

  9. oracle一点记录

    查看数据库实例名(SERVICE_NAME): sql: select instance_name from v$instance; 如何知道oracle客户端是32位还是64的.windows下启动 ...

  10. WindowManagerPolicy的后缀 解释

    转自:http://blog.csdn.net/hunanwy/article/details/8563090 Ti,called from the input thread. Input threa ...