读一个WebGL引擎的渲染流程

材料: three.js 0.95.0

三要素:Camera Scene WebGLRenderer 

1、Camera

透视投影相机PerspectiveCamera,初始化参数:fov,aspect,near,far。

FOV:视野范围【角度值】,可以理解为人眼的上下眼睑之间的可视角度,眼睛瞪大的时候我们的上下眼睑会移动,裸露更大的眼球范围,增大可视角度,视野内的物体会变的更多。

ASPECT:GL屏幕绘制范围的横纵比。如果绘制容器的横纵比例发生变化需要调节改参数值,不然绘制到屏幕上的物体的呈现比例会发生变形。一般为绘制区域的W/H。

ZNEAR:视点到近截面的距离,一般为大于0的数值。

ZFAR:视点到远截面的距离,一般为大于近截面的数值。

可以说FOV,ASPECT约束了可视区域的形态,而ZNEAR、ZFAR决定了可视区域的大小。

2、Scene

用于管理three.js呈现内容的对象,可以放置物体、灯光和相机。

background:设置背景比较常用,可以设置颜色,也可以使用一张纹理。也就是说可以把渲染背景换成自己萌宠的图片来提高开发效率。

3、WebGLRenderer

用于设置渲染设备以及一些与设备相关的WebGL状态。

canvas :一个用来绘制输出的 Canvas对象。对应DOM元素,如果没有传入,将创建一个新的画布元素。

context :所用的渲染上下文【RenderingContext】对象。

precision :着色器的精度。可以是"highp", "mediump" 或 "lowp". 默认为"highp",如果设备支持的话。

alpha : 画布是否包含alpha缓冲区。默认为 false。

premultipliedAlpha : 渲染器是否假设颜色已经预乘了alpha。 默认为 true。

antialias:是否执行反锯齿。 默认为 false。

stencil :开启8位深模板缓冲, 默认为 true。

preserveDrawingBuffer :是否保存缓冲区,直到手动清除或覆盖。默认为 false。

powerPreference:根据GPU性能选择适合的渲染上下文渲染状态。可以是"high-performance", "low-power" 或者 "default"。默认为 "default"。

depth :开启16位深深度缓冲, 默认为 true。

logarithmicDepthBuffer :是否使用对数深度缓冲器。如果在一个场景中处理尺度上的巨大差异,可能需要使用这种方法。默认为 false.

4、render的过程

渲染的过程可以大致描述为:

1)更新Scene与Camera的世界坐标变换矩阵【2、4】;

2)根据二者的矩阵作用到渲染对象上进行投影变换【6】;

3)渲染背景【7】;

4)渲染场景【8】。

整个过程中涉及到了一些vr相机状态更新、视锥提出、裁剪、阴影等高级功能。涉及到shader的创建在renderObject的过程中有初始化Material的调用,或创建或者从缓存中获取。

你可能感兴趣的:(读一个WebGL引擎的渲染流程)