diff --git a/examples/webglrenderer2_sandbox.html b/examples/webglrenderer2_sandbox.html index 49efb757517cb9e384c12dae50946376ecd415b3..9061789924211c324eab14ef4033cbb6e408d637 100644 --- a/examples/webglrenderer2_sandbox.html +++ b/examples/webglrenderer2_sandbox.html @@ -133,13 +133,13 @@ scene = new THREE.Scene(); scene.fog = new THREE.Fog( 0xffffff, 0.00025 ); - var geometry = new Sphere( 100, 32, 16 ); + var geometry = new Sphere( 50, 32, 16 ); var uniforms = ShaderUtils.lib[ 'basic' ].uniforms; var vertex_shader = ShaderUtils.lib[ 'basic' ].vertex_shader; var fragment_shader = ShaderUtils.lib[ 'basic' ].fragment_shader; - var generatedTexture = new THREE.Texture( generateTexture() ); + var generatedTexture = new THREE.Texture( generateTexture(), new THREE.UVMapping(), THREE.ClampToEdgeWrapping, THREE.ClampToEdgeWrapping ); var materials = [ @@ -158,18 +158,22 @@ ]; - for ( var i = 0; i < 1000; i ++ ) { + for ( var i = 0; i < 5000; i ++ ) { var mesh = new THREE.Mesh( geometry, materials[ Math.floor( Math.random() * materials.length ) ] ); mesh.position.x = Math.random() * 10000 - 5000; mesh.position.y = Math.random() * 10000 - 5000; mesh.position.z = Math.random() * 10000 - 5000; + mesh.rotation.x = Math.random() * 360 * ( Math.PI / 180 ); + mesh.rotation.y = Math.random() * 360 * ( Math.PI / 180 ); mesh.scale.x = mesh.scale.y = mesh.scale.z = Math.random() * 4 + 1; + mesh.updateMatrix(); + mesh.autoUpdateMatrix = false; scene.addObject( mesh ); } - renderer = new THREE.WebGLRenderer2(); + renderer = new THREE.WebGLRenderer2( false ); renderer.setSize( window.innerWidth, window.innerHeight ); // renderer.sortObjects = false; container.appendChild( renderer.domElement ); diff --git a/src/renderers/WebGLRenderer2.js b/src/renderers/WebGLRenderer2.js index 51eaf23746e68321644914d4458ade07e4d174c9..eeb12d8e950789ade9c5498b2447eb98b4e96e37 100644 --- a/src/renderers/WebGLRenderer2.js +++ b/src/renderers/WebGLRenderer2.js @@ -6,7 +6,7 @@ * @author supereggbert / http://www.paulbrunt.co.uk/ */ -THREE.WebGLRenderer2 = function () { +THREE.WebGLRenderer2 = function ( antialias ) { var _renderList = null, _projector = new THREE.Projector(), @@ -22,7 +22,8 @@ THREE.WebGLRenderer2 = function () { try { - _gl = _canvas.getContext( 'experimental-webgl', { antialias: true } ); + antialias = antialias !== undefined ? antialias : true; + _gl = _canvas.getContext( 'experimental-webgl', { antialias: antialias } ); } catch(e) { } @@ -79,6 +80,8 @@ THREE.WebGLRenderer2 = function () { _viewMatrixArray.set( camera.matrix.flatten() ); _projectionMatrixArray.set( camera.projectionMatrix.flatten() ); + _currentProgram = null; + /* for ( o = 0, ol = scene.objects.length; o < ol; o++ ) { @@ -87,7 +90,6 @@ THREE.WebGLRenderer2 = function () { } */ - _currentProgram = null; _renderList = _projector.projectObjects( scene, camera, this.sortObjects ); for ( o = 0, ol = _renderList.length; o < ol; o++ ) { @@ -146,13 +148,13 @@ THREE.WebGLRenderer2 = function () { if ( scene.fog ) { - _gl.uniform1i( program.uniforms.fog, 1 ); + _gl.uniform1f( program.uniforms.fog, 1 ); _gl.uniform1f( program.uniforms.fogDensity, scene.fog.density ); _gl.uniform3f( program.uniforms.fogColor, scene.fog.color.r, scene.fog.color.g, scene.fog.color.b ); } else { - _gl.uniform1i( program.uniforms.fog, 0 ); + _gl.uniform1f( program.uniforms.fog, 0 ); } @@ -508,17 +510,14 @@ THREE.WebGLRenderer2 = function () { // fog - pfs += 'uniform bool fog;\n'; + pfs += 'uniform float fog;\n'; pfs += 'uniform vec3 fogColor;\n'; pfs += 'uniform float fogDensity;\n'; - fs += 'if ( fog ) {\n'; fs += 'const float LOG2 = 1.442695;\n'; - fs += 'float z = gl_FragCoord.z / gl_FragCoord.w;\n'; + fs += 'float z = fog * ( gl_FragCoord.z / gl_FragCoord.w );\n'; fs += 'float fogFactor = exp2( - fogDensity * fogDensity * z * z * LOG2 );\n'; - fs += 'fogFactor = clamp( fogFactor, 0.0, 1.0 );\n'; - fs += 'gl_FragColor = mix( vec4( fogColor, 1.0 ), gl_FragColor, fogFactor );\n', - fs += '}\n'; + fs += 'gl_FragColor = mix( gl_FragColor, vec4( fogColor, 1.0 ), 1.0 - clamp( fogFactor, 0.0, 1.0 ) );\n', identifiers.push( 'fog', 'fogColor', 'fogDensity' );