Browse Source

WebGLRenderer: Add activeCubeFace/activeMipMapLevel to setRenderTarget()

Mugen87 6 years ago
parent
commit
50d05fc234

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

@@ -50,12 +50,6 @@
 
 		<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>
 
 

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

@@ -434,9 +434,11 @@
 		<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>
 
-		<h3>[method:null setRenderTarget]( [param:WebGLRenderTarget renderTarget] )</h3>
+		<h3>[method:null setRenderTarget]( [param:WebGLRenderTarget renderTarget], [param:Integer activeCubeFace], [param:Integer activeMipMapLevel] )</h3>
 		<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.
 		</p>
 

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

@@ -47,11 +47,6 @@
 
 		<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>
 
 

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

@@ -387,9 +387,11 @@
 		<h3>[method:null setPixelRatio]( [param:number value] )</h3>
 		<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>
-		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
 		</p>
 

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

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

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

@@ -135,9 +135,8 @@ THREE.PMREMGenerator = ( function () {
 
 		renderToCubeMapTargetFace: function ( renderer, renderTarget, faceIndex ) {
 
-			renderTarget.activeCubeFace = faceIndex;
 			shader.uniforms[ 'faceIndex' ].value = faceIndex;
-			renderer.setRenderTarget( renderTarget );
+			renderer.setRenderTarget( renderTarget, faceIndex );
 			renderer.clear();
 			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.activeCubeFace = 0;
-		renderer.setRenderTarget( renderTarget );
-
+		renderer.setRenderTarget( renderTarget, 0 );
 		renderer.render( scene, cameraPX );
 
-		renderTarget.activeCubeFace = 1;
+		renderer.setRenderTarget( renderTarget, 1 );
 		renderer.render( scene, cameraNX );
 
-		renderTarget.activeCubeFace = 2;
+		renderer.setRenderTarget( renderTarget, 2 );
 		renderer.render( scene, cameraPY );
 
-		renderTarget.activeCubeFace = 3;
+		renderer.setRenderTarget( renderTarget, 3 );
 		renderer.render( scene, cameraNY );
 
-		renderTarget.activeCubeFace = 4;
+		renderer.setRenderTarget( renderTarget, 4 );
 		renderer.render( scene, cameraPZ );
 
 		renderTarget.texture.generateMipmaps = generateMipmaps;
 
-		renderTarget.activeCubeFace = 5;
+		renderer.setRenderTarget( renderTarget, 5 );
 		renderer.render( scene, cameraNZ );
 
 		renderer.setRenderTarget( currentRenderTarget );

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

@@ -10,6 +10,4 @@ export class WebGLRenderTargetCube extends WebGLRenderTarget {
     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 );
 
-	this.activeCubeFace = 0; // PX 0, NX 1, PY 2, NY 3, PZ 4, NZ 5
-	this.activeMipMapLevel = 0;
-
 }
 
 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.
-   * 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.
-   * 
-   * 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}.
    */
   render(
@@ -346,7 +346,7 @@ export class WebGLRenderer implements Renderer {
    * @deprecated Use {@link WebGLRenderer#getRenderTarget .getRenderTarget()} instead.
    */
   getCurrentRenderTarget(): RenderTarget;
-  setRenderTarget(renderTarget?: RenderTarget): void;
+  setRenderTarget(renderTarget?: RenderTarget, activeCubeFace?: number, activeMipMapLevel?: number): void;
   readRenderTargetPixels(
     renderTarget: RenderTarget,
     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;
 
@@ -2567,7 +2567,7 @@ function WebGLRenderer( parameters ) {
 
 			if ( renderTarget.isWebGLRenderTargetCube ) {
 
-				framebuffer = __webglFramebuffer[ renderTarget.activeCubeFace ];
+				framebuffer = __webglFramebuffer[ activeCubeFace || 0 ];
 				isCube = true;
 
 			} else if ( renderTarget.isWebGLMultisampleRenderTarget ) {
@@ -2606,7 +2606,7 @@ function WebGLRenderer( parameters ) {
 		if ( isCube ) {
 
 			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 );
 
 		}