فهرست منبع

onBeforeRender ok

mesh.visible instead of material.visible... that was the issue. The rest also is now similar to the mirror render chunk inside its onBeforeRender callback.
Atrahasis 7 سال پیش
والد
کامیت
98004d208c
2فایلهای تغییر یافته به همراه17 افزوده شده و 3 حذف شده
  1. 17 2
      examples/js/WaterShader.js
  2. 0 1
      examples/webgl_shaders_ocean.html

+ 17 - 2
examples/js/WaterShader.js

@@ -297,13 +297,28 @@ THREE.WaterMesh = function ( width, height, options ) {
 
 	scope.add( waterMaterial );
 
-	scope.render = function ( renderer, scene, camera ) { 
+	scope.onBeforeRender = function ( renderer, scene, camera ) { 
 
 		scope.water.updateTextureMatrix( camera );
 
+		var currentRenderTarget = renderer.getRenderTarget();
+
+		var currentVrEnabled = renderer.vr.enabled;
+		var currentShadowAutoUpdate = renderer.shadowMap.autoUpdate;
+
+		scope.visible = false;
+
+		renderer.vr.enabled = false; // Avoid camera modification and recursion
+		renderer.shadowMap.autoUpdate = false; // Avoid re-computing shadows
+
 		renderer.render( scene, scope.water.mirrorCamera, scope.water.renderTarget, true );
 
-		scope.material.visible = true;
+		scope.visible = true;
+
+		renderer.vr.enabled = currentVrEnabled;
+		renderer.shadowMap.autoUpdate = currentShadowAutoUpdate;
+
+		renderer.setRenderTarget( currentRenderTarget );
 
 	};
 	

+ 0 - 1
examples/webgl_shaders_ocean.html

@@ -270,7 +270,6 @@
 				water.material.uniforms.size.value = parameters.size;
 				water.material.uniforms.distortionScale.value = parameters.distortionScale;
 				water.material.uniforms.alpha.value = parameters.alpha;
-				water.render( renderer, scene, camera );
 
 				renderer.render( scene, camera );