跳至主要內容

三维基础

大约 5 分钟

三维基础

可交互式三维渲染引擎由视图、对象、事件、灯光系统、相机、动画等组成,在进入三维渲染引擎开发前,以下是必须要了解的概念:

三维坐标系

三维坐标系由x,y和z三个轴线构成,x轴正方向朝右,y轴正方向朝上,z轴正方向朝向屏幕外。三维坐标则是由x、y、z三个数值构成,如[0, 0, 0]表示原点。

图:三维右手坐标系示意图(图片来自网络)

三维坐标的标准表示方法为:new THREE.Vector3(0, 0, 0),引擎在实例化各类对象时做了序列化处理,只需要提供[0,0,0]即可。

单位

为了和现实世界相映射,三维场景中1个单位代表1米,如:

  • 坐标[1, 1, 1]表示距离原点[0, 0, 0]x轴1米、y轴1米、z轴1米的点;
  • 三维几何体(Geometry)中的宽度(width)为100,则代表为100米。

为了保持三维场景的尺寸标准统一性,所有三维模型应使用为单位,如果原有模型单位为cmmm,请转换为后再单独导出模型使用。

如果不方便更改模型的单位,也可以使用在模型对象的scale设置模型比例达到同样的效果。

三维投影

3D投影是一种将三维空间的点映射到二维平面的算法,即3D空间的内容投影到2D屏幕坐标的过程,不同的投影算法会最终产生不同的屏幕内容显示效果, 支持透视投影Perspective Projection 和正交投影Orthographic Projection这两种最主常用的投影算法。

透视投影

透视投影是为了获得接近真实三维物体的视觉效果而在二维的纸或者画布平面上绘图或者渲染的一种方法,它也称为透视图。 透视使得远的对象变小,近的对象变大,平行线会出现相交等更更接近人眼观察的视觉效果。

图:透视投影示意(图片来自网络)

正交投影

正交投影也叫正交视图,在这种投影方式下,不管远近物体看起来都是同样大小,屏幕成像让人感觉与人眼观察效果不一样。 正交投影在建模过程很有用,它提供了对场景更“技术”的视觉,让它易于绘制和判断比例。

图:正交投影示意(图片来自网络)

物体基础

三角面、网格、模型

模型是三维场景中可见物的基础,比如建筑、绿植、设备等等,几乎绝大多数可见物体都是以模型为基础构成。

三角面由三个顶点构成,是计算机硬件显卡(GPU)唯一能处理的基础多边形,由三个点构成的三角面一定是在同一个平面上,而四个或更多点构成的多边形在三维空间中,不一定会在同一个平面上。

而网格( Mesh)则是由一个三角面或多个三角面拼接形成,是构建模型形状的基础。在三维渲染引擎中, 构成各种图形形状的三角面顶点数据以及三角面的索引数据集合就是网格,网格在三维应用运行时是不可见的。

模型是由网格( Mesh)与材质( Material)组成,模型的基础是网格,网格的基础是三角面。三角面越多,模型可表现的细节越丰富。细节表现比较丰富的,通常被称为精模,细节表现相对较弱的,被称为简模。

材质

材质(Material)就是材料的质感,如木头与金属、玻璃与毛发,从粗糙度、光泽度、反射、透明、颜色、纹理等等方面,不同的材料质感会明显不同。网格只是三维形状的数据,网格形状本身是不可见的,只有当网格形状添加材质,物体才会可见。

建模

建模主要分为建模和贴图两大部分,可以简单地将建模的过程理解为“塑骨”,贴图的过程理解为“美容”,常用的建模软件是3ds Max、Maya、ZBrush、Blender等。

贴图

贴图(Texture)就是用Photoshop、Substance Painter、3DCoat等软件制作材质平面图,用于覆盖在模型表面,贴图就是将2D纹理贴到3D模型网格的过程,这个将3D顶点坐标与2D纹理的UV坐标映射对应的过程由引擎完成。

三维数学概念

向量

既有大小又有方向的量称之为向量(物理学叫矢量),向量也有维度,例如,2维、3维、4维。与向量对应的是数量(物理学叫标量),数量是只有大小没有方向的量。

2维、3维向量表示为: THREE.Vector2THREE.Vector3()

矩阵

在线性代数中,矩阵是以行和列形式组织的矩形数字块,以数组的角度去理解,那向量是数量的数组,矩阵则是向量的数组,矩阵常用于位置、旋转、缩放的计算,表示为THREE.Matrix

射线

射线是只有一个端点无限延长形成的直的线,射线THREE.RayCaster是一个数据对象,拥有起点与发射方向两个属性。常用于基础的碰撞检测,也可以用于鼠标拾取。

包围体

包围体用于可见检测计算,基本思想是体积稍大且结构简单的包围体来替代结构复杂的被包围体,当进行检测的时候,达到提高检测效率的作用。比如,一旦检测到包围体被遮挡不可见,那无论包围体内是什么样的模型,那全部不可见。

上次编辑于:
贡献者: dashun