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

举个简单的例子来说明正交投影与透视投影照相机的区别。使用透视投影照相机获得的结果是类似人眼在真实世界中看到的有“近大远小”的效果(如下图中的(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. [Android Pro] 临时关闭selinux模式 setenforce 0

    setenforce 0 设置SELinux 成为permissive模式 临时关闭selinux的

  2. 解决At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this log

    pom增加:<dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</art ...

  3. oracle 监控

    sqlplus "/as sysdba" .监控当前数据库谁在运行什么SQL语句 SELECT osuser, username, sql_text from v$session ...

  4. printf 打印 unit32_t

    今天在网上找了老半天终于找到了:printf 打印 uint32_t 类型  uint32_t domainId; printf("\ndomainId=========%lu", ...

  5. SYSIBM.SYSPACKSTMT db2 存储statement的表

    SYSIBM.SYSPACKSTMT table   The SYSIBM.SYSPACKSTMT table contains one or more rows for each statement ...

  6. NYOJ题目809摸底

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAtEAAAI4CAIAAAAj4CIaAAAgAElEQVR4nO3drXLjTLeG4X0S4TmQYB

  7. 2014年十个优秀的免费CDN加速服务-国内和国外免费CDN

    这是一篇总结近几年来网络上出现了各类免费CDN服务的文章,文章本来应该早就发出来的,但是因为近期的各种原因一直拖到现在.之前部落已经总结了近几年来的优秀免费空间,新手朋友不必在茫茫“网”海中寻找免费空 ...

  8. Android缓存学习入门

    本文主要包括以下内容 利用LruCache实现内存缓存 利用DiskLruCache实现磁盘缓存 LruCache与DiskLruCache结合实例 利用了缓存机制的瀑布流实例 内存缓存的实现 pub ...

  9. 20145206《Java程序设计》实验三实验报告

    20145206<Java程序设计>实验三实验报告 实验内容 XP基础 XP核心实践 相关工具 实验步骤 (一)敏捷开发与XP 软件工程是把系统的.有序的.可量化的方法应用到软件的开发.运 ...

  10. SAE云平台上传图片和发送邮件

    1.远程图片保存至Storage 其中public是Storage中的容器名,"目录1/目录2/"是容器下的路径 $file_content 是得到的文件数据 $s = new S ...