渲染器(Renderer)
渲染器(Renderer)用来绘制场景,渲染器分为Canvas渲染器(CanvasRenderer)和WebGL渲染器(WebGLRenderer)。
Canvas渲染器(CanvasRenderer)
WebGLRenderer 和 CanvasRenderer 都是使用HTML5的 <canvas>
直接内嵌在网页中。Canvas渲染器使用相对较慢的Canvas 2D Context API来绘制场景。
//判断是否支持WebGL
function webglAvailable() {
try {
var canvas = document.createElement( 'canvas' );
return !!( window.WebGLRenderingContext && (
canvas.getContext( 'webgl' ) ||
canvas.getContext( 'experimental-webgl' ) )
);
} catch ( e ) {
return false;
}
}
//支持webGL使用WebGLRenderer,不支持回退使用CanvasRenderer
if ( webglAvailable() ) {
renderer = new THREE.WebGLRenderer();
} else {
renderer = new THREE.CanvasRenderer();
}
构造器(Constructor)
CanvasRenderer(parameters)
parameters是一个用来定义渲染器行为的可选对象。当没有设置该参数时,将使用默认值
canvas — 一个用来绘制输出的 Canvas 对象。
three.js已经将CanvasRenderer移除了。
function CanvasRenderer() { console.error( 'THREE.CanvasRenderer has been removed' ); }
WebGL渲染器(WebGLRenderer)
WebGL渲染器使用WebGL来绘制您的场景,如果您的设备支持的话。使用WebGL将能够利用GPU硬件加速从而提高渲染性能。
这个渲染器比 Canvas渲染器(CanvasRenderer)) 有更好的性能。
查看源码
构造器(Constructor)
WebGLRenderer( parameters)
- parameters 是一个可选对象,包含用来定义渲染器行为的属性。当没有设置该参数时,将使用默认值。
- canvas — 一个用来绘制输出的 Canvas 对象。
- context — 所用的 渲染上下文(RenderingContext) 对象。
- precision — 着色器的精度。可以是"highp", "mediump" 或 "lowp". 默认为"highp",如果设备支持的话。
- alpha — Boolean, 是否可以设置背景色透明,默认为 false.
- premultipliedAlpha — Boolean, 默认为 true.
- antialias — Boolean,是否开启反锯齿,设置为true开启反锯齿, 默认为 false.
- stencil — Boolean, 默认为 true.
- preserveDrawingBuffer — Boolean,是否保存绘图缓冲,若设为true,则可以提取canvas绘图的缓冲, 默认为 false.
- depth — Boolean, 默认为 true.
- logarithmicDepthBuffer — Boolean, 默认为 false.
- maxLights — Int ,最大灯光数,我们的场景中最多能够添加多少个灯光。
var renderer = new THREE.WebGLRenderer({
antialias: true //抗锯齿
}); /*生成渲染器对象(属性:抗锯齿效果为设置有效)*/
属性(Properties)
- .domElement 一个用来绘制输出的 Canvas 对象。 该对象通过构造函数中的渲染器所自动创建(如果没有提供的话);你只需要将其添加到您的网页中。
- .context 从HTML5 canvas中获取的用来绘图的WebGL渲染上下文。
- .autoClear 定义渲染器是否应该在渲染之前自动清除其输出。
- .autoClearColor 如果autoClear为true,该属性用来定义渲染器是否需要清除颜色缓存。默认为 true.
- .autoClearDepth 如果autoClear为true,该属性用来定义渲染器是否需要清除深度缓存。默认为 true.
- .autoClearStencil 如果autoClear为true,该属性用来定义渲染器是否需要清除模板缓存。默认为 true。
.sortObjects 定义渲染器是否需要对对象排序。默认为 true。
注:排序是用来试图正确地渲染具有一定程度透明度的对象。根据定义,排序对象可能在所有情况下都不工作。 根据应用程序的需要,我们可能需要关闭该排序功能,而使用其他方法处理透明渲染,比如手动确定物体的绘制顺序。
.clippingPlanes 一个用户定义的在世界空间中的裁剪平面对象。这些平面是全局范围可用的。空间中的点和该平面的点积为负的将被裁剪掉。默认为 [].
- .localClippingEnabled 定义渲染器是否考虑对象级别的裁剪平面。默认为 false.
- .gammaInput 默认为 false. 如果设置了该参数,表示所有纹理和颜色应当使用预乘的gamma值来输入。
- .gammaOutput 默认为 false. 如果设置了该参数,表示所有纹理和颜色应当使用预乘的gamma值来输出。
- .shadowMap 实现阴影贴图(或阴影映射)的组件的引用。
- .shadowMap.enabled 默认为 false. 如果设置了该参数,则启用在场景中的阴影贴图。
- .shadowMap.type 阴影贴图类型定义 (未经过滤,百分比接近过滤,带着色器双线性过滤的百分比接近过滤) 可选取值有: THREE.BasicShadowMap, THREE.PCFShadowMap, THREE.PCFSoftShadowMap. 默认为 THREE.PCFShadowMap.
- .shadowMap.renderReverseSided 默认为 true。该属性表示是否将材质所指定的反面渲染到阴影贴图中。如果禁用,必须在表面光源上设置适当的shadow.bias,可以同时投射和接收阴影以正确渲染。
- .shadowMap.renderSingleSided 默认为 true. 是否将指定的材料视为双面,而在渲染阴影贴图时使用正面(front-side)。如果禁用,必须在表面光源上设置适当的shadow.bias,可以同时投射和接收阴影以正确渲染。
- .maxMorphTargets 默认为 8. 着色器中允许的最大MorphTargets数量。记住,标准材料只允许8个MorphTargets。
- .maxMorphNormals 默认为 4. 着色器中允许的最大MorphNormals数量。记住,标准材料只允许8个MorphNormals。
.info 一个关于显卡内存和渲染过程统计信息的对象。便于调试和分析。该对象包含如下字段:
- memory:
- geometries
- textures
- render:
- calls
- vertices
- faces
- points
- programs
- memory:
方法(Methods)
.getContext () 返回WebGL渲染上下文。
.getContextAttributes () 返回一个描述WebGL上下文创建时所设置属性的对象。
.supportsVertexTextures () 返回一个 Boolean,如果该上下文支持顶点纹理,则为true。
.getPixelRatio () 返回当前设备的像素比。
.setPixelRatio ( value ) 设置设备像素比。通常用于HiDPI设备防止模糊输出canvas。
.getSize () 返回一个包含渲染器输出canvas宽高的对象,以像素为单位。
.setSize ( width, height, updateStyle ) 调整输出canvas尺寸(宽度,高度),要考虑设备像素比,并且设置视口(viewport)以匹配该尺寸。如果设置 updateStyle 为true,则显式添加像素到输出canvas的样式中。
.setViewport ( x, y, width, height ) 设置视口,从 (x, y) 到 (x + width, y + height)。
.setScissor ( x, y, width, height ) 设置裁剪区域,从 (x, y) 到 (x + width, y + height).
注:以上两种方法中点(x,y)是该区域的左下角。 该区域被定义从左到右的宽度,以及从底部到顶部的高度。该垂直方向的定义和HTML canvas元素的填充方向相反。
.setScissorTest ( boolean ) 启用或禁用裁剪测试。当被激活时,只有裁剪区域内的像素会被进一步的渲染行为所影响。
.setClearColor ( color, alpha ) 设置清除的颜色和透明度。
// 创建一个具有红色背景的渲染器 var renderer = new THREE.WebGLRenderer(); renderer.setSize( 200, 100 ); renderer.setClearColor( 0xff0000 );
.getClearColor () 返回一个使用当前清除颜色的 THREE.Color 实例。
.getClearAlpha () 返回一个使用当前清除透明度的 float。范围从0到1。
.clear ( color, depth, stencil ) 告诉渲染器来清除其颜色、深度和模板绘制缓冲。该方法初始化颜色缓冲区为当前清除颜色值。 参数缺省为true。
.renderBufferImmediate ( object, program, shading )
- object — 一个 3D对象(Object3D) 实例
- program — 一个着色器程序(shaderProgram)实例
- shading — 一个材料(Material)实例。
渲染一个即时缓冲区。被renderImmediateObject所调用。
.renderBufferDirect ( camera, lights, fog, material, geometryGroup, object ) 使用相机和正确的材料渲染缓冲模型组。
.renderBuffer ( camera, lights, fog, material, geometryGroup, object ) 使用相机和正确的材料渲染模型组。
.render ( scene, camera, renderTarget, forceClear ) 使用相机渲染一个场景。 如果指定了renderTarget,则渲染到上面,否则渲染到通常的canvas上。 如果forceClear为true, 颜色、深度和模板绘制缓冲将在渲染前被清除,即使渲染器的autoClear属性为false。 即使forceClear被设置为true,我们仍然可以通过设置.autoClearColor, .autoClearStencil 或 .autoClearDepth 属性为false来阻止特定的缓存被清除。
.readRenderTargetPixels ( renderTarget, x, y, width, height, buffer ) 从渲染目标中读取像素数据到你给定的缓冲区中。缓存应该是一个Javascript Uint8Array对象,通过new Uint8Array( renderTargetWidth renderTargetWidth 4 )来实例化,考虑大小和颜色信息。这是gl.readPixels的封装。
.renderImmediateObject ( camera, lights, fog, material, object ) 使用相机渲染一个即时对象。
.setFaceCulling ( cullFace, frontFace )
- cullFace —- "back", "front", "front_and_back", 或 false.
- frontFace —- "ccw" 或 "cw
用于设定GPU中gl的fontFace和cullFace状态,从而启用/禁用渲染时的面剔除。 If cullFace is false, culling will be disabled.
.setTexture ( texture, slot )
- texture -- 需要设置的 texture。
- slot -- 纹理所要使用的槽(slot)编号。
此方法设置正确的纹理为wegl着色器的正确插槽。槽数可以被发现作为一个值的均匀的采样。
.setRenderTarget ( renderTarget ) renderTarget -- 需要设置的 renderTarget(可选)。 该方法设置当前渲染目标。如果参数被忽略,则设置要绘制的canvas为当前渲染目标。
.supportsCompressedTextureS3TC () 此方法返回true,如果WebGL支持S3TC格式的纹理压缩。
.getMaxAnisotropy () 返回的纹理的各向异性水平。
.getPrecision () 获取着色器所用精度。返回 "highp","mediump" 或 "lowp"。
.setMaterialFaces (material)
- material -- 不该被剔除的面的 material。
该方法设置在WebGL渲染器中需要被剔除的面。
.supportsStandardDerivatives () 此方法返回true,如果设备WebGL的实现支持标准的衍生物。
.supportsFloatTextures () 此方法返回true,如果设备WebGL的实现支持浮点纹理。
.clearTarget (renderTarget, color, depth, stencil)
- renderTarget -- 需要被清除的 renderTarget。
- color -- 如果设置,则颜色被清除。
- depth -- 如果设置,则深度被清除。
- stencil -- 如果设置,则模板被清除。
这个方法可以清除渲染目标。为此,它首先需要激活该渲染目标。
WebGL渲染器目标(WebGLRenderTarget)
一个渲染目标是一个缓冲区,显卡在该缓冲区中为一个后台渲染的场景绘制像素。它被用于多种效果。
查看源码
构造器(Constructor)
WebGLRenderTarget(width, height, options)
- width -- 渲染目标对象的宽度。
- height -- 渲染目标对象的高度。
- options是可选的对象,保存一个自动生成的目标纹理的纹理参数以及depthBuffer / stencilBuffer布尔值。 关于纹理参数请参考阅读 Texture。
- wrapS — Number default is THREE.ClampToEdgeWrapping.
- wrapT — Number default is THREE.ClampToEdgeWrapping.
- magFilter — Number, default is THREE.LinearFilter.
- minFilter — Number, default is THREE.LinearFilter.
- format — Number, default is THREE.RGBAFormat.
- type — Number, default is THREE.UnsignedByteType.
- anisotropy — Number, default is 1.
- encoding — Number, default is THREE.LinearEncoding.
- depthBuffer — Boolean, default is true. Set this to false if you don't need it.
- stencilBuffer — Boolean, default is true. Set this to false if you don't need it. 创建一个新的具有一定宽度和高度的渲染目标。
属性(Properties)
- .uuid 这个渲染目标实例的一个唯一标识。
- .width 渲染目标的宽度。
- .height 渲染目标的高度。
- .scissor 在渲染目标视口内部的一个矩形区域。在该区域以外的片段将被遗弃。
- .scissorTest 指示裁剪测试是否激活。
- .viewport 该渲染目标的视口。
- .texture 该纹理实例保存所要渲染的像素。使用它作为进一步处理的输入。
- .depthBuffer 渲染到深度缓冲区。默认是true。
- .stencilBuffer 渲染到模板缓冲区。默认是true。
- .depthTexture 如果设置了该参数,则场景深度将被渲染到这个纹理。默认为null。
方法(Methods)
- .setSize ( width, height ) 设置渲染目标的大小。
- .clone () 克隆该渲染目标。
- .copy ( source ) 拷贝给定渲染目标的设置。
- .dispose () 分发一个dispose事件。
该类适用 EventDispatcher 方法。
WebGL渲染器立方体目标(WebGLRenderTargetCube)
立方体相机(CubeCamera)使用该对象来作为WebGL渲染器目标(WebGLRenderTarget)
查看源码
构造器(Constructor)
WebGLRenderTargetCube(width, height, options)
- width -- 渲染目标的宽度。
- height -- 渲染目标的高度。
- options -- 用来设置渲染目标属性的选项。
属性(Properties)
- .activeCubeFace
activeCubeFace 属性对应于立方体的一个面 (PX 0, NX 1, PY 2, NY 3, PZ 4, NZ 5) 并且被 立方体相机(CubeCamera) 在内部使用和设置。
See WebGL渲染器目标(WebGLRenderTarget) for inherited properties
方法(Methods)
继承的方法请查阅基类 WebGL渲染器目标(WebGLRenderTarget)