Ver código fonte

StereoEffect: Support cameras with parents.

Mr.doob 11 anos atrás
pai
commit
b230256f2a
1 arquivos alterados com 16 adições e 6 exclusões
  1. 16 6
      examples/js/effects/StereoEffect.js

+ 16 - 6
examples/js/effects/StereoEffect.js

@@ -8,12 +8,16 @@ THREE.StereoEffect = function ( renderer ) {
 	// API
 
 	this.separation = 6;
-	this.targetDistance = 100;
+	this.targetDistance = 500;
 
 	// internals
 
 	var _width, _height;
 
+	var _position = new THREE.Vector3();
+	var _quaternion = new THREE.Quaternion();
+	var _scale = new THREE.Vector3();
+
 	var _cameraL = new THREE.PerspectiveCamera();
 	var _cameraR = new THREE.PerspectiveCamera();
 	var _target = new THREE.Vector3();
@@ -33,9 +37,15 @@ THREE.StereoEffect = function ( renderer ) {
 
 	this.render = function ( scene, camera ) {
 
+		scene.updateMatrixWorld();
+
+		if ( camera.parent === undefined ) camera.updateMatrixWorld();
+	
+		camera.matrixWorld.decompose( _position, _quaternion, _scale );
+
 		_target.set( 0, 0, - this.targetDistance );
-		_target.applyQuaternion( camera.quaternion );
-		_target.add( camera.position );
+		_target.applyQuaternion( _quaternion );
+		_target.add( _position );
 
 		// left
 
@@ -46,7 +56,7 @@ THREE.StereoEffect = function ( renderer ) {
 		_cameraL.near = camera.near;
 		_cameraL.far = camera.far;
 
-		_cameraL.position.copy( camera.position );
+		_cameraL.position.copy( _position );
 		_cameraL.translateX( - this.separation );
 		_cameraL.lookAt( _target );
 
@@ -57,7 +67,7 @@ THREE.StereoEffect = function ( renderer ) {
 		_cameraR.near = camera.near;
 		_cameraR.far = camera.far;
 
-		_cameraR.position.copy( camera.position );
+		_cameraR.position.copy( _position );
 		_cameraR.translateX( this.separation );
 		_cameraR.lookAt( _target );
 
@@ -70,7 +80,7 @@ THREE.StereoEffect = function ( renderer ) {
 		renderer.render( scene, _cameraL );
 
 		renderer.setViewport( _width, 0, _width, _height );
-		renderer.render( scene, _cameraR, false );
+		renderer.render( scene, _cameraR );
 
 	};