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

Added ArrayCamera. See #10927.

上级 21461ed7
......@@ -61,6 +61,7 @@ export { StereoCamera } from './cameras/StereoCamera.js';
export { PerspectiveCamera } from './cameras/PerspectiveCamera.js';
export { OrthographicCamera } from './cameras/OrthographicCamera.js';
export { CubeCamera } from './cameras/CubeCamera.js';
export { ArrayCamera } from './cameras/ArrayCamera.js';
export { Camera } from './cameras/Camera.js';
export { AudioListener } from './audio/AudioListener.js';
export { PositionalAudio } from './audio/PositionalAudio.js';
......
/**
* @author mrdoob / http://mrdoob.com/
*/
import { PerspectiveCamera } from './PerspectiveCamera';
function ArrayCamera( array ) {
PerspectiveCamera.call( this );
this.enabled = false;
this.cameras = array || [];
}
ArrayCamera.prototype = Object.assign( Object.create( PerspectiveCamera.prototype ), {
constructor: ArrayCamera,
isArrayCamera: true
} );
export { ArrayCamera };
......@@ -1060,6 +1060,8 @@ function WebGLRenderer( parameters ) {
// update camera matrices and frustum
camera.onBeforeRender( _this );
if ( camera.parent === null ) camera.updateMatrixWorld();
camera.matrixWorldInverse.getInverse( camera.matrixWorld );
......@@ -1236,6 +1238,14 @@ function WebGLRenderer( parameters ) {
state.buffers.depth.setMask( true );
state.buffers.color.setMask( true );
if ( camera.isArrayCamera && camera.enabled ) {
_this.setScissorTest( false );
}
camera.onAfterRender( _this );
// _gl.finish();
};
......@@ -1402,22 +1412,30 @@ function WebGLRenderer( parameters ) {
object.onBeforeRender( _this, scene, camera, geometry, material, group );
object.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, object.matrixWorld );
object.normalMatrix.getNormalMatrix( object.modelViewMatrix );
if ( camera.isArrayCamera && camera.enabled ) {
if ( object.isImmediateRenderObject ) {
var cameras = camera.cameras;
state.setMaterial( material );
for ( var j = 0, jl = cameras.length; j < jl; j ++ ) {
var program = setProgram( camera, scene.fog, material, object );
var camera2 = cameras[ j ];
var bounds = camera2.bounds;
_this.setViewport(
bounds.x * _width * _pixelRatio, bounds.y * _height * _pixelRatio,
bounds.z * _width * _pixelRatio, bounds.w * _height * _pixelRatio
);
_this.setScissor(
bounds.x * _width * _pixelRatio, bounds.y * _height * _pixelRatio,
bounds.z * _width * _pixelRatio, bounds.w * _height * _pixelRatio
);
_this.setScissorTest( true );
renderObject( object, scene, camera2, geometry, material, group );
_currentGeometryProgram = '';
renderObjectImmediate( object, program, material );
}
} else {
_this.renderBufferDirect( camera, scene.fog, geometry, material, object, group );
renderObject( object, scene, camera, geometry, material, group );
}
......@@ -1427,6 +1445,29 @@ function WebGLRenderer( parameters ) {
}
function renderObject( object, scene, camera, geometry, material, group ) {
object.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, object.matrixWorld );
object.normalMatrix.getNormalMatrix( object.modelViewMatrix );
if ( object.isImmediateRenderObject ) {
state.setMaterial( material );
var program = setProgram( camera, scene.fog, material, object );
_currentGeometryProgram = '';
renderObjectImmediate( object, program, material );
} else {
_this.renderBufferDirect( camera, scene.fog, geometry, material, object, group );
}
}
function initMaterial( material, fog, object ) {
var materialProperties = properties.get( material );
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册