浏览代码

WebGLRenderer: Add activeCubeFace/activeMipMapLevel to setRenderTarget()

Mugen87 6 年之前
父节点
当前提交
50d05fc234

+ 0 - 6
docs/api/en/renderers/WebGLRenderTargetCube.html

@@ -50,12 +50,6 @@
 
 
 		<h2>Properties</h2>
 		<h2>Properties</h2>
 
 
-		<h3>[property:integer activeCubeFace]</h3>
-		<p>
-		The activeCubeFace property corresponds to a cube side (PX 0, NX 1, PY 2, NY 3, PZ 4, NZ 5) and is
-		used and set internally by the [page:CubeCamera].
-		</p>
-
 		<h3>See [page:WebGLRenderTarget] for inherited properties</h3>
 		<h3>See [page:WebGLRenderTarget] for inherited properties</h3>
 
 
 
 

+ 4 - 2
docs/api/en/renderers/WebGLRenderer.html

@@ -434,9 +434,11 @@
 		<h3>[method:null setPixelRatio]( [param:number value] )</h3>
 		<h3>[method:null setPixelRatio]( [param:number value] )</h3>
 		<p>Sets device pixel ratio. This is usually used for HiDPI device to prevent bluring output canvas.</p>
 		<p>Sets device pixel ratio. This is usually used for HiDPI device to prevent bluring output canvas.</p>
 
 
-		<h3>[method:null setRenderTarget]( [param:WebGLRenderTarget renderTarget] )</h3>
+		<h3>[method:null setRenderTarget]( [param:WebGLRenderTarget renderTarget], [param:Integer activeCubeFace], [param:Integer activeMipMapLevel] )</h3>
 		<p>
 		<p>
-		renderTarget -- The [page:WebGLRenderTarget renderTarget] that needs to be activated (optional).<br /><br />
+		renderTarget -- The [page:WebGLRenderTarget renderTarget] that needs to be activated (optional).<br />
+		activeCubeFace -- Specifies the active cube side (PX 0, NX 1, PY 2, NY 3, PZ 4, NZ 5) of [page:WebGLRenderTargetCube] (optional).<br />
+		activeMipMapLevel -- Specifies the active mipmap level (optional).<br /><br />
 		This method sets the active rendertarget. If the parameter is omitted the canvas is set as the active rendertarget.
 		This method sets the active rendertarget. If the parameter is omitted the canvas is set as the active rendertarget.
 		</p>
 		</p>
 
 

+ 0 - 5
docs/api/zh/renderers/WebGLRenderTargetCube.html

@@ -47,11 +47,6 @@
 
 
 		<h2>属性</h2>
 		<h2>属性</h2>
 
 
-		<h3>[property:integer activeCubeFace]</h3>
-		<p>
-		activeCubeFace属性对应立方体的面(PX 0, NX 1, PY 2, NY 3, PZ 4, NZ 5) 并由[page:CubeCamera]内部使用和设置
-		</p>
-
 		<h3>继承属性,请参阅[page:WebGLRenderTarget]</h3>
 		<h3>继承属性,请参阅[page:WebGLRenderTarget]</h3>
 
 
 
 

+ 4 - 2
docs/api/zh/renderers/WebGLRenderer.html

@@ -387,9 +387,11 @@
 		<h3>[method:null setPixelRatio]( [param:number value] )</h3>
 		<h3>[method:null setPixelRatio]( [param:number value] )</h3>
 		<p>设置设备像素比。通常用于避免HiDPI设备上绘图模糊</p>
 		<p>设置设备像素比。通常用于避免HiDPI设备上绘图模糊</p>
 
 
-		<h3>[method:null setRenderTarget]( [param:WebGLRenderTarget renderTarget] )</h3>
+		<h3>[method:null setRenderTarget]( [param:WebGLRenderTarget renderTarget], [param:Integer activeCubeFace], [param:Integer activeMipMapLevel] )</h3>
 		<p>
 		<p>
-		renderTarget -- 需要被激活的[page:WebGLRenderTarget renderTarget](可选).<br /><br />
+		renderTarget -- 需要被激活的[page:WebGLRenderTarget renderTarget](可选).<br />
+		activeCubeFace -- Specifies the active cube side (PX 0, NX 1, PY 2, NY 3, PZ 4, NZ 5) of [page:WebGLRenderTargetCube] (optional).<br />
+		activeMipMapLevel -- Specifies the active mipmap level (optional).<br /><br />
 		该方法设置活跃rendertarget. 参数缺省则将canvas设置成活跃rendertarget
 		该方法设置活跃rendertarget. 参数缺省则将canvas设置成活跃rendertarget
 		</p>
 		</p>
 
 

+ 1 - 3
examples/js/loaders/EquirectangularToCubeGenerator.js

@@ -162,15 +162,13 @@ THREE.EquirectangularToCubeGenerator = ( function () {
 
 
 			for ( var i = 0; i < 6; i ++ ) {
 			for ( var i = 0; i < 6; i ++ ) {
 
 
-				this.renderTarget.activeCubeFace = i;
-
 				var v = this.views[ i ];
 				var v = this.views[ i ];
 
 
 				camera.position.set( 0, 0, 0 );
 				camera.position.set( 0, 0, 0 );
 				camera.up.set( v.u[ 0 ], v.u[ 1 ], v.u[ 2 ] );
 				camera.up.set( v.u[ 0 ], v.u[ 1 ], v.u[ 2 ] );
 				camera.lookAt( v.t[ 0 ], v.t[ 1 ], v.t[ 2 ] );
 				camera.lookAt( v.t[ 0 ], v.t[ 1 ], v.t[ 2 ] );
 
 
-				renderer.setRenderTarget( this.renderTarget );
+				renderer.setRenderTarget( this.renderTarget, i );
 				renderer.clear();
 				renderer.clear();
 				renderer.render( scene, camera );
 				renderer.render( scene, camera );
 
 

+ 1 - 2
examples/js/pmrem/PMREMGenerator.js

@@ -135,9 +135,8 @@ THREE.PMREMGenerator = ( function () {
 
 
 		renderToCubeMapTargetFace: function ( renderer, renderTarget, faceIndex ) {
 		renderToCubeMapTargetFace: function ( renderer, renderTarget, faceIndex ) {
 
 
-			renderTarget.activeCubeFace = faceIndex;
 			shader.uniforms[ 'faceIndex' ].value = faceIndex;
 			shader.uniforms[ 'faceIndex' ].value = faceIndex;
-			renderer.setRenderTarget( renderTarget );
+			renderer.setRenderTarget( renderTarget, faceIndex );
 			renderer.clear();
 			renderer.clear();
 			renderer.render( scene, camera );
 			renderer.render( scene, camera );
 
 

+ 6 - 8
src/cameras/CubeCamera.js

@@ -65,26 +65,24 @@ function CubeCamera( near, far, cubeResolution, options ) {
 
 
 		renderTarget.texture.generateMipmaps = false;
 		renderTarget.texture.generateMipmaps = false;
 
 
-		renderTarget.activeCubeFace = 0;
-		renderer.setRenderTarget( renderTarget );
-
+		renderer.setRenderTarget( renderTarget, 0 );
 		renderer.render( scene, cameraPX );
 		renderer.render( scene, cameraPX );
 
 
-		renderTarget.activeCubeFace = 1;
+		renderer.setRenderTarget( renderTarget, 1 );
 		renderer.render( scene, cameraNX );
 		renderer.render( scene, cameraNX );
 
 
-		renderTarget.activeCubeFace = 2;
+		renderer.setRenderTarget( renderTarget, 2 );
 		renderer.render( scene, cameraPY );
 		renderer.render( scene, cameraPY );
 
 
-		renderTarget.activeCubeFace = 3;
+		renderer.setRenderTarget( renderTarget, 3 );
 		renderer.render( scene, cameraNY );
 		renderer.render( scene, cameraNY );
 
 
-		renderTarget.activeCubeFace = 4;
+		renderer.setRenderTarget( renderTarget, 4 );
 		renderer.render( scene, cameraPZ );
 		renderer.render( scene, cameraPZ );
 
 
 		renderTarget.texture.generateMipmaps = generateMipmaps;
 		renderTarget.texture.generateMipmaps = generateMipmaps;
 
 
-		renderTarget.activeCubeFace = 5;
+		renderer.setRenderTarget( renderTarget, 5 );
 		renderer.render( scene, cameraNZ );
 		renderer.render( scene, cameraNZ );
 
 
 		renderer.setRenderTarget( currentRenderTarget );
 		renderer.setRenderTarget( currentRenderTarget );

+ 0 - 2
src/renderers/WebGLRenderTargetCube.d.ts

@@ -10,6 +10,4 @@ export class WebGLRenderTargetCube extends WebGLRenderTarget {
     options?: WebGLRenderTargetOptions
     options?: WebGLRenderTargetOptions
   );
   );
 
 
-  activeCubeFace: number; // PX 0, NX 1, PY 2, NY 3, PZ 4, NZ 5
-  activeMipMapLevel: number;
 }
 }

+ 0 - 3
src/renderers/WebGLRenderTargetCube.js

@@ -8,9 +8,6 @@ function WebGLRenderTargetCube( width, height, options ) {
 
 
 	WebGLRenderTarget.call( this, width, height, options );
 	WebGLRenderTarget.call( this, width, height, options );
 
 
-	this.activeCubeFace = 0; // PX 0, NX 1, PY 2, NY 3, PZ 4, NZ 5
-	this.activeMipMapLevel = 0;
-
 }
 }
 
 
 WebGLRenderTargetCube.prototype = Object.create( WebGLRenderTarget.prototype );
 WebGLRenderTargetCube.prototype = Object.create( WebGLRenderTarget.prototype );

+ 7 - 7
src/renderers/WebGLRenderer.d.ts

@@ -321,13 +321,13 @@ export class WebGLRenderer implements Renderer {
 
 
   /**
   /**
    * Render a scene using a camera.
    * Render a scene using a camera.
-   * The render is done to a previously specified {@link WebGLRenderTarget#renderTarget .renderTarget} set by calling 
+   * The render is done to a previously specified {@link WebGLRenderTarget#renderTarget .renderTarget} set by calling
    * {@link WebGLRenderer#setRenderTarget .setRenderTarget} or to the canvas as usual.
    * {@link WebGLRenderer#setRenderTarget .setRenderTarget} or to the canvas as usual.
-   * 
-   * By default render buffers are cleared before rendering but you can prevent this by setting the property 
-   * {@link WebGLRenderer#autoClear autoClear} to false. If you want to prevent only certain buffers being cleared 
-   * you can set either the {@link WebGLRenderer#autoClearColor autoClearColor}, 
-   * {@link WebGLRenderer#autoClearStencil autoClearStencil} or {@link WebGLRenderer#autoClearDepth autoClearDepth} 
+   *
+   * By default render buffers are cleared before rendering but you can prevent this by setting the property
+   * {@link WebGLRenderer#autoClear autoClear} to false. If you want to prevent only certain buffers being cleared
+   * you can set either the {@link WebGLRenderer#autoClearColor autoClearColor},
+   * {@link WebGLRenderer#autoClearStencil autoClearStencil} or {@link WebGLRenderer#autoClearDepth autoClearDepth}
    * properties to false. To forcibly clear one ore more buffers call {@link WebGLRenderer#clear .clear}.
    * properties to false. To forcibly clear one ore more buffers call {@link WebGLRenderer#clear .clear}.
    */
    */
   render(
   render(
@@ -346,7 +346,7 @@ export class WebGLRenderer implements Renderer {
    * @deprecated Use {@link WebGLRenderer#getRenderTarget .getRenderTarget()} instead.
    * @deprecated Use {@link WebGLRenderer#getRenderTarget .getRenderTarget()} instead.
    */
    */
   getCurrentRenderTarget(): RenderTarget;
   getCurrentRenderTarget(): RenderTarget;
-  setRenderTarget(renderTarget?: RenderTarget): void;
+  setRenderTarget(renderTarget?: RenderTarget, activeCubeFace?: number, activeMipMapLevel?: number): void;
   readRenderTargetPixels(
   readRenderTargetPixels(
     renderTarget: RenderTarget,
     renderTarget: RenderTarget,
     x: number,
     x: number,

+ 3 - 3
src/renderers/WebGLRenderer.js

@@ -2548,7 +2548,7 @@ function WebGLRenderer( parameters ) {
 
 
 	};
 	};
 
 
-	this.setRenderTarget = function ( renderTarget ) {
+	this.setRenderTarget = function ( renderTarget, activeCubeFace, activeMipMapLevel ) {
 
 
 		_currentRenderTarget = renderTarget;
 		_currentRenderTarget = renderTarget;
 
 
@@ -2567,7 +2567,7 @@ function WebGLRenderer( parameters ) {
 
 
 			if ( renderTarget.isWebGLRenderTargetCube ) {
 			if ( renderTarget.isWebGLRenderTargetCube ) {
 
 
-				framebuffer = __webglFramebuffer[ renderTarget.activeCubeFace ];
+				framebuffer = __webglFramebuffer[ activeCubeFace || 0 ];
 				isCube = true;
 				isCube = true;
 
 
 			} else if ( renderTarget.isWebGLMultisampleRenderTarget ) {
 			} else if ( renderTarget.isWebGLMultisampleRenderTarget ) {
@@ -2606,7 +2606,7 @@ function WebGLRenderer( parameters ) {
 		if ( isCube ) {
 		if ( isCube ) {
 
 
 			var textureProperties = properties.get( renderTarget.texture );
 			var textureProperties = properties.get( renderTarget.texture );
-			_gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + renderTarget.activeCubeFace, textureProperties.__webglTexture, renderTarget.activeMipMapLevel );
+			_gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + activeCubeFace || 0, textureProperties.__webglTexture, activeMipMapLevel || 0 );
 
 
 		}
 		}