提交 2baec79a 编写于 作者: M Mr.doob

Scene: Added background property.

上级 851b868a
......@@ -261,6 +261,29 @@ THREE.WebGLRenderer = function ( parameters ) {
//
var backgroundCamera = new THREE.OrthographicCamera( - 1, 1, 1, - 1, 0, 1 );
var backgroundCamera2 = new THREE.PerspectiveCamera();
var backgroundPlaneMesh = new THREE.Mesh(
new THREE.PlaneBufferGeometry( 2, 2 ),
new THREE.MeshBasicMaterial( { depthTest: false, depthWrite: false } )
);
var backgroundBoxShader = THREE.ShaderLib[ 'cube' ];
var backgroundBoxMesh = new THREE.Mesh(
new THREE.BoxBufferGeometry( 5, 5, 5 ),
new THREE.ShaderMaterial( {
uniforms: backgroundBoxShader.uniforms,
vertexShader: backgroundBoxShader.vertexShader,
fragmentShader: backgroundBoxShader.fragmentShader,
depthTest: false,
depthWrite: false,
side: THREE.BackSide
} )
);
objects.update( backgroundPlaneMesh );
objects.update( backgroundBoxMesh );
//
function getTargetPixelRatio() {
return _currentRenderTarget === null ? _pixelRatio : 1;
......@@ -1137,7 +1160,46 @@ THREE.WebGLRenderer = function ( parameters ) {
this.setRenderTarget( renderTarget );
if ( this.autoClear || forceClear ) {
//
var needsClear = this.autoClear || forceClear;
var background = scene.background;
if ( background === null ) {
glClearColor( _clearColor.r, _clearColor.g, _clearColor.b, _clearAlpha );
} else if ( background instanceof THREE.CubeTexture ) {
backgroundCamera2.projectionMatrix = camera.projectionMatrix;
backgroundCamera2.matrixWorld.extractRotation( camera.matrixWorld );
backgroundCamera2.matrixWorldInverse.getInverse( backgroundCamera2.matrixWorld );
backgroundBoxMesh.material.uniforms[ "tCube" ].value = background;
backgroundBoxMesh.modelViewMatrix.multiplyMatrices( backgroundCamera2.matrixWorldInverse, backgroundBoxMesh.matrixWorld );
_this.renderBufferDirect( backgroundCamera2, null, backgroundBoxMesh.geometry, backgroundBoxMesh.material, backgroundBoxMesh, null );
needsClear = false;
} else if ( background instanceof THREE.Texture ) {
backgroundPlaneMesh.material.map = background;
_this.renderBufferDirect( backgroundCamera, null, backgroundPlaneMesh.geometry, backgroundPlaneMesh.material, backgroundPlaneMesh, null );
needsClear = false;
} else if ( background instanceof THREE.Color ) {
glClearColor( background.r, background.g, background.b, 1 );
needsClear = true;
}
if ( needsClear ) {
this.clear( this.autoClearColor, this.autoClearDepth, this.autoClearStencil );
......
......@@ -8,6 +8,7 @@ THREE.Scene = function () {
this.type = 'Scene';
this.background = null;
this.fog = null;
this.overrideMaterial = null;
......@@ -22,6 +23,7 @@ THREE.Scene.prototype.copy = function ( source, recursive ) {
THREE.Object3D.prototype.copy.call( this, source, recursive );
if ( source.background !== null ) this.background = source.background.clone();
if ( source.fog !== null ) this.fog = source.fog.clone();
if ( source.overrideMaterial !== null ) this.overrideMaterial = source.overrideMaterial.clone();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册