util~Camera(aspect, fovy, near, far)

相机是我们观察现实世界时人眼的一个模拟,相机的位置姿势等属性是影响渲染结果的重要因素,webgl渲染总体流程其实和相机照相的流程是一样的
1、将物体摆放到合适位置(模型变换,跟相机无关)
2、在合适的位置摆放相机,并确定相机的姿势,即物体和相机的相对位置(视图变换,跟相机有关)
3、确定相机的焦距、视场角等属性,最终确定出现在照片上的物体 (投影变换,跟相机有关)
所以相机在整个渲染过程中是至关重要的,如果想更加灵活的观察场景,相机是必不可少的

Summary

Methods:
clone

相机克隆

forward

相机在视线方向上运动(按照比例)。正数:代表相机拉近拉远。负数:跳跃到反方向运动(不支持这类运动)。

getAspect

获取相机的宽高比。

getCustumVPMatrix

防止重复计算

getFar

获取远裁面。

getFovy

获取相机Y方向张角。

getNear

获取近裁面。

getPosition

获取相机位置。单位:地图单位。

getProjectMatrix

获取投影矩阵

getRay

获取视线向量

getRotateX

获取相机绕X轴旋转的角度。单位:度。

getRotateZ

获取相机绕Z轴旋转的角度。单位:度。

getViewshed

获取相机的可视域空间【贴地】

getVPMatrix

视图投影矩阵。

move

相机系统的运动,相机系统由相机位置、视点位置、及他们构成的视线以及上方向组成。故整体运动不会改变系统内部关系:比如视线向量,上方向均不会发生改变。

project

将世界坐标通过视图投影转换,转化为NDC坐标

rotateX

相机绕过视点的X轴旋转{angle}度

rotateZ

相机绕过视点的Z轴旋转{angle}度

setAspect

设置相机的宽高比。

setAutofocus

设置相机是否自动调焦,缺省true。ture时主要作为地图的虚拟相机,它会根据相机离目标点的距离调整近裁面和远裁面以适应地图的不同比例尺渲染需要
false:主要用于真实的物理相机场景,它的最小视距(近裁面)和最大视距(远裁面)均为相机特性。无论相机如何移动,其近裁面|远裁面均为固定。

setFar

设置远裁面。

setFovy

设置相机Y方向张角。

setNear

设置近裁面。

setPosition

设置相机位置。单位:地图单位。

unproject

将NDC坐标反投影到世界坐标. 窗口坐标转NDC坐标ndc.x=(2win.x-w)/w ndc.y=(2win.y-h)/h

Constructor

new Camera(aspect, fovy, near, far)

Parameters:
Name Type Default Description
aspect Number

近裁面的宽高比

fovy Number 45

垂直可视角,单位度

near Number 0.000001

近裁面距离相机的距离

far Number 1

远裁面距离相机的距离

Methods

clone() → {module:util~Camera}

相机克隆

forward(value)

相机在视线方向上运动(按照比例)。正数:代表相机拉近拉远。负数:跳跃到反方向运动(不支持这类运动)。

Parameters:
Name Type Description
value Number

getAspect()

获取相机的宽高比。

getCustumVPMatrix() → {mat4}

防止重复计算

Returns:
mat4

getFar()

获取远裁面。

getFovy()

获取相机Y方向张角。

getNear()

获取近裁面。

getPosition() → {Array}

获取相机位置。单位:地图单位。

Returns:
Array -

长度为3的数组。

getProjectMatrix(type) → {mat4}

获取投影矩阵

Parameters:
Name Type Default Description
type String PERSPECTIVE

投影类型。支持PERSPECTIVE(透视投影) | ORTHO(正射投影)

Returns:
mat4 -

一个用于投影变换的矩阵。

getRay()

获取视线向量

getRotateX()

获取相机绕X轴旋转的角度。单位:度。

getRotateZ()

获取相机绕Z轴旋转的角度。单位:度。

getViewshed(expand) → {Array}

获取相机的可视域空间【贴地】

Parameters:
Name Type Default Description
expand number 2

地理范围外拓倍数,缺省值外拓2倍。【备注】远裁面按照外拓3倍作为边界条件。

Returns:
Array

getVPMatrix(type)

视图投影矩阵。

Parameters:
Name Type Default Description
type String PERSPECTIVE

投影类型。支持PERSPECTIVE(透视投影) | ORTHO(正射投影)

move(x, y, z, prevCalc)

相机系统的运动,相机系统由相机位置、视点位置、及他们构成的视线以及上方向组成。故整体运动不会改变系统内部关系:比如视线向量,上方向均不会发生改变。

Parameters:
Name Type Default Description
x Number 0

相机在沿x轴方向上的运动距离。

y Number 0

相机在沿y轴方向上的运动距离。

z Number 0

相机在沿z轴方向上的运动距离。

prevCalc Boolean false

是否预先计算相机位置以和地形作相交判断

project(position) → {Array}

将世界坐标通过视图投影转换,转化为NDC坐标

Parameters:
Name Type Description
position Array

世界坐标位置,长度为3的Array,或vec3

Returns:
Array

rotateX(angle, anchor, prevCalc) → {*}

相机绕过视点的X轴旋转{angle}度

Parameters:
Name Type Description
angle Number

旋转角度,单位:度。

anchor module:basetype~Coordinate

相机围绕的锚点

prevCalc Boolean

是否预先计算相机位置以和地形作相交判断

Returns:
*

rotateZ(angle, anchor, prevCalc) → {*}

相机绕过视点的Z轴旋转{angle}度

Parameters:
Name Type Description
angle Number

旋转角度,单位:度 。

anchor module:basetype~Coordinate

相机围绕的锚点

prevCalc Boolean

是否预先计算相机位置以和地形作相交判断

Returns:
*

setAspect()

设置相机的宽高比。

setAutofocus(flag)

设置相机是否自动调焦,缺省true。ture时主要作为地图的虚拟相机,它会根据相机离目标点的距离调整近裁面和远裁面以适应地图的不同比例尺渲染需要
false:主要用于真实的物理相机场景,它的最小视距(近裁面)和最大视距(远裁面)均为相机特性。无论相机如何移动,其近裁面|远裁面均为固定。

Parameters:
Name Type Description
flag Boolean

是否自适应调整相机焦距(近裁面)|视距(远裁面)。

setFar(v)

设置远裁面。

Parameters:
Name Type Description
v Number

远裁面值。

setFovy(v)

设置相机Y方向张角。

Parameters:
Name Type Description
v Number

张角,单位:度。

setNear(v)

设置近裁面。

Parameters:
Name Type Description
v Number

近裁面值。

setPosition(position, achor)

设置相机位置。单位:地图单位。

Parameters:
Name Type Default Description
position Array

长度为3的数组。

achor achor true

是否锚定目标点来设置position,缺省true,锚定目标点,故位置改变会重新计算相机姿态。false:不锚定目标点,故不重新计算相机姿态。

unproject(position, zw) → {Array}

将NDC坐标反投影到世界坐标. 窗口坐标转NDC坐标ndc.x=(2win.x-w)/w ndc.y=(2win.y-h)/h

Parameters:
Name Type Default Description
position Array

NDC坐标,长度为2或3的Array,如果长度为2,存在维度缺失,需通过指定世界坐标系下的一个z值(缺省0,表示与地面相交),方法内反算NDC下的z。
如果长度为3则无维度缺省,忽略参数z

zw number 0

世界坐标的z,缺省0.

Returns:
Array