本篇主要介绍Three.js照相机中的透视投影照相机。

  上一篇:正交投影照相机

5.透视投影照相机构造函数

  透视投影照相机(Perspective Camera)的构造函数是:

THREE.PerspectiveCamera(fov, aspect, near, far) 

   - fov 可视角度 
   - aspect 实际窗口的纵横比 
   - near 近处的裁面的距离
   - far 远处的裁面的距离

  只有离相机的距离大于near值,小于far值,且在相机的可视角度之内,才能被相机投影到。

  让我们通过几张透视照相机投影的图详细了解这些参数。

  透视图中,灰色的部分是视景体,是可能被渲染的物体所在的区域。

  fov是视景体竖直方向上的张角(是角度制而非弧度制),如侧视图所示。

  aspect等于width / height,是照相机水平方向和竖直方向长度的比值,通常设为Canvas的横纵比例。

  near和far分别是照相机到视景体最近、最远的距离,均为正值,且far应大于near。

6.透视投影照相机实例

  源码:

<!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.PerspectiveCamera(45, 400 / 300, 1, 10);
camera.position.set(0, 0, 5);
scene.add(camera); // 边长为一的正方体
var cube = new THREE.Mesh(new THREE.CubeGeometry(1, 1, 1),
new THREE.MeshBasicMaterial({
color: 0xff0000,
wireframe: true
})
);
scene.add(cube); // 渲染
renderer.render(scene, camera);
}
</script>
</body>
</html>

  其中,设置透视投影照相机,这里canvas长400px,宽300px,所以aspect设为400 / 300:

var camera = new THREE.PerspectiveCamera(45, 400 / 300, 1, 10);

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

scene.add(camera);

  对比正交投影,透视投影可以看到全部的12条边,而且有近大远小的效果。

7.竖直张角 

  将视角fov由45改为60,得到这样的效果:

  再改成600:

  将照相机的竖直张角设置得更大时,视景体变大了,因而正方体相对于整个视景体的大小就变小了,看起来正方形就显得变小了。 正方体的实际大小并未改变。

  注意,改变fov并不会引起画面横竖比例的变化,而改变aspect则会改变横竖比例。

  next:立方体、平面、球体

  整理自张雯莉《Three.js入门指南》

  其他参考:Three.js-照相机

Three.js基础探寻三——透视投影照相机的更多相关文章

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

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

  2. Three.js基础探寻一

    1.webGL 一种网络标准,定义了一些较底层的图形接口. 2.Three.js 一个3Djs库,webGL开源框架中比较优秀的一个.除了webGL以外,Three.js还提供了基于Canvas.SV ...

  3. Three.js基础探寻九——网格

    在学习了几何形状和材质之后,我们就能使用他们来创建物体了.最常用的一种物体就是网格(Mesh),网格是由顶点.边.面等组成的物体:其他物体包括线段(Line).骨骼(Bone).粒子系统(Partic ...

  4. Three.js基础探寻八——法向材质与材质的纹理贴图

    4.法向材质 法向材质可以将材质的颜色设置为其法向量的方向,有时候对于调试很有帮助. 法向材质的设定很简单,甚至不用设置任何参数: new THREE.MeshNormalMaterial() 材质的 ...

  5. Three.js基础探寻四——立方体、平面与球体

    前面简单介绍了webGL和Three.js的背景以及照相机的设定,接下来介绍一些Three.js中的几何形状. 1.立方体 虽然这一形状的名字叫立方体(CubeGeometry),但它其实是长方体,也 ...

  6. JS基础(三)

    25.使用JS操作CSS样式 DHTML表示动态HTML(Dynamic HTML,DHTML),不是标记语言,只是一种由微软提出的网页脚本化概念,目标是结合JS+HTML+CSS设计动态特效,得到很 ...

  7. Three.js基础探寻五——正二十面体、圆环面等

    除了立方体.平面.球体,Three.js还提供了很多其他几何形状. 1.圆形 CircleGeometry可以创建圆形或者扇形: THREE.CircleGeometry(radius, segmen ...

  8. Three.js基础探寻六——文字形状与自定义形状

    1.文字形状 说起3d文字想起了早年word里的一些艺术字: 时间真快. 那么TextGeometry可以用来创建三维的文字形状. 使用文字形状需要下载和引用额外的字体库.这里,我们以 helveti ...

  9. js基础练习三之数码时钟

    这章节有两个实例,1,定时器的使用; 2,数码时钟; 用到的js知识:定时器,Date对象. >>>>>定时器 开启定时器: setInterval 间隔型 setTim ...

随机推荐

  1. Smart Disk -- proposed by Liyuan Liu

    Need 如今,照相渐渐得成为了人们的日常举动.几乎所有的人都在随时随地得照相.手机,相机,平板越来越多的设备对照相进行了支持,同时, 照片以一种前所未有的速度渐渐淹没我们的文件夹.而寻找照片,对照片 ...

  2. SSM 框架快速整合实例--学生查询

    一.快速准备 SSM 框架即 Spring 框架.SpringMVC 框架.MyBatis 框架,关于这几个框架的基础和入门程序,我前面已经写过几篇文章作为基础和入门介绍了.对于这 3 个框架还不熟悉 ...

  3. 以webService为客户端获取List泛型结果集

    首先搭建好webService,添加XFire1.2Core Libraries 和XFire1.2HTTP Client Libraries,连接上数据库,下例以oracle为数据库. 连接Oral ...

  4. Jira 的 数据库备份恢复 简单过程

    1 发现jira的备份恢复很简单, 只需要导入导出一个zip包即可 导出 选择系统 管理员入口登录 选择导入导出 进行备份系统数据 选择一个文件名就能备份 备份结果 将文件copy到上一一级目录的 i ...

  5. Java关于Robot类的使用

    利用Robot类实现自动操作,实现效果是运行之后鼠标自动定位到整个屏幕坐标系的(635,454)位置,输入wangtianze package com.wtz.util; import java.aw ...

  6. Spring之使用表达式配置切入点

    使用表达式配置切入点

  7. 3分钟带你搞懂ES6 import 和 export

    如下语句是 default import: // B.js import A from './A' 且只在A存在 default export 时生效: // A.js export default ...

  8. 初征——NOIP2018游记

    前言 从最初接触oi到今年noip到来,也已经将近有一年了.从对于程序一窍不懂到现在开始学习算法,只是短短的不到一年的时间罢了.这次noip,不仅仅是我oi生涯的第一次noip,更是相当于是对我这一年 ...

  9. 【刷题】BZOJ 3495 PA2010 Riddle

    Description 有n个城镇被分成了k个郡,有m条连接城镇的无向边. 要求给每个郡选择一个城镇作为首都,满足每条边至少有一个端点是首都. Input 第一行有三个整数,城镇数n(1<=n& ...

  10. 手动生成moc文件

    在VS中写Qt项目时,手动添加了一个类,由于要用到信号槽,所以需要生成相应的moc文件.写好信号槽以后,在类里面第一行应该写上Q_OBJECT关键字,编译项目会提示无法找到moc_XXX.cpp文件. ...