提交 ecdbb2ef 编写于 作者: A alteredq

Fixed broken uniforms cloning. Fixed broken uqbiquity test.

TODO: start using uniforms cloning also for MeshShaderMaterials.
上级 51356311
......@@ -140,18 +140,17 @@ Q.color;r.setAttribute("style","fill: "+B.__styleString)}t.appendChild(r)}}else
THREE.RenderableFace3){w=C.v1;z=C.v2;P=C.v3;w.positionScreen.x*=c;w.positionScreen.y*=-D;z.positionScreen.x*=c;z.positionScreen.y*=-D;P.positionScreen.x*=c;P.positionScreen.y*=-D;s.addPoint(w.positionScreen.x,w.positionScreen.y);s.addPoint(z.positionScreen.x,z.positionScreen.y);s.addPoint(P.positionScreen.x,P.positionScreen.y);if(R.instersects(s)){L=0;for(y=C.meshMaterials.length;L<y;){Q=C.meshMaterials[L++];if(Q instanceof THREE.MeshFaceMaterial){J=0;for(S=C.faceMaterials.length;J<S;)(Q=C.faceMaterials[J++])&&
b(w,z,P,C,Q,H)}else Q&&b(w,z,P,C,Q,H)}}}else if(C instanceof THREE.RenderableFace4){w=C.v1;z=C.v2;P=C.v3;T=C.v4;w.positionScreen.x*=c;w.positionScreen.y*=-D;z.positionScreen.x*=c;z.positionScreen.y*=-D;P.positionScreen.x*=c;P.positionScreen.y*=-D;T.positionScreen.x*=c;T.positionScreen.y*=-D;s.addPoint(w.positionScreen.x,w.positionScreen.y);s.addPoint(z.positionScreen.x,z.positionScreen.y);s.addPoint(P.positionScreen.x,P.positionScreen.y);s.addPoint(T.positionScreen.x,T.positionScreen.y);if(R.instersects(s)){L=
0;for(y=C.meshMaterials.length;L<y;){Q=C.meshMaterials[L++];if(Q instanceof THREE.MeshFaceMaterial){J=0;for(S=C.faceMaterials.length;J<S;)(Q=C.faceMaterials[J++])&&f(w,z,P,T,C,Q,H)}else Q&&f(w,z,P,T,C,Q,H)}}}}}};
THREE.WebGLRenderer=function(a){function b(e,i){e.fragment_shader=i.fragment_shader;e.vertex_shader=i.vertex_shader;var g=i.uniforms,k,j,l={};for(k in g){l[k]={};for(j in uniforms[k]){parameter_src=g[k][j];parameter_dst=l[k][j];parameter_dst=parameter_src instanceof THREE.Color||parameter_src instanceof THREE.Vector3||parameter_src instanceof THREE.Texture?parameter_src.clone():parameter_src}}e.uniforms=l}function f(e,i,g){var k=c.createProgram();g=["#ifdef GL_ES\nprecision highp float;\n#endif",
g?"#define USE_FOG":"",g instanceof THREE.FogExp2?"#define FOG_EXP2":"","uniform mat4 viewMatrix;\nuniform vec3 cameraPosition;\n"].join("\n");var j=[c.getParameter(c.MAX_VERTEX_TEXTURE_IMAGE_UNITS)>0?"#define VERTEX_TEXTURES":"","uniform mat4 objectMatrix;\nuniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform mat4 viewMatrix;\nuniform mat3 normalMatrix;\nuniform vec3 cameraPosition;\nattribute vec3 position;\nattribute vec3 normal;\nattribute vec2 uv;\n"].join("\n");c.attachShader(k,
t("fragment",g+e));c.attachShader(k,t("vertex",j+i));c.linkProgram(k);c.getProgramParameter(k,c.LINK_STATUS)||alert("Could not initialise shaders\nVALIDATE_STATUS: "+c.getProgramParameter(k,c.VALIDATE_STATUS)+", gl error ["+c.getError()+"]");k.uniforms={};k.attributes={};return k}function d(e,i){if(e.image.length==6){if(!e.image.__webGLTextureCube&&!e.image.__cubeMapInitialized&&e.image.loadCount==6){e.image.__webGLTextureCube=c.createTexture();c.bindTexture(c.TEXTURE_CUBE_MAP,e.image.__webGLTextureCube);
c.texParameteri(c.TEXTURE_CUBE_MAP,c.TEXTURE_WRAP_S,c.CLAMP_TO_EDGE);c.texParameteri(c.TEXTURE_CUBE_MAP,c.TEXTURE_WRAP_T,c.CLAMP_TO_EDGE);c.texParameteri(c.TEXTURE_CUBE_MAP,c.TEXTURE_MAG_FILTER,c.LINEAR);c.texParameteri(c.TEXTURE_CUBE_MAP,c.TEXTURE_MIN_FILTER,c.LINEAR_MIPMAP_LINEAR);for(var g=0;g<6;++g)c.texImage2D(c.TEXTURE_CUBE_MAP_POSITIVE_X+g,0,c.RGBA,c.RGBA,c.UNSIGNED_BYTE,e.image[g]);c.generateMipmap(c.TEXTURE_CUBE_MAP);c.bindTexture(c.TEXTURE_CUBE_MAP,null);e.image.__cubeMapInitialized=true}c.activeTexture(c.TEXTURE0+
i);c.bindTexture(c.TEXTURE_CUBE_MAP,e.image.__webGLTextureCube)}}function h(e,i){if(!e.__webGLTexture&&e.image.loaded){e.__webGLTexture=c.createTexture();c.bindTexture(c.TEXTURE_2D,e.__webGLTexture);c.texImage2D(c.TEXTURE_2D,0,c.RGBA,c.RGBA,c.UNSIGNED_BYTE,e.image);c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_S,n(e.wrap_s));c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_T,n(e.wrap_t));c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MAG_FILTER,n(e.mag_filter));c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MIN_FILTER,
n(e.min_filter));c.generateMipmap(c.TEXTURE_2D);c.bindTexture(c.TEXTURE_2D,null)}c.activeTexture(c.TEXTURE0+i);c.bindTexture(c.TEXTURE_2D,e.__webGLTexture)}function m(e,i){var g,k,j;g=0;for(k=i.length;g<k;g++){j=i[g];e.uniforms[j]=c.getUniformLocation(e,j)}}function q(e,i){var g,k,j;g=0;for(k=i.length;g<k;g++){j=i[g];e.attributes[j]=c.getAttribLocation(e,j)}}function t(e,i){var g;if(e=="fragment")g=c.createShader(c.FRAGMENT_SHADER);else if(e=="vertex")g=c.createShader(c.VERTEX_SHADER);c.shaderSource(g,
i);c.compileShader(g);if(!c.getShaderParameter(g,c.COMPILE_STATUS)){alert(c.getShaderInfoLog(g));return null}return g}function n(e){switch(e){case THREE.RepeatWrapping:return c.REPEAT;case THREE.ClampToEdgeWrapping:return c.CLAMP_TO_EDGE;case THREE.MirroredRepeatWrapping:return c.MIRRORED_REPEAT;case THREE.NearestFilter:return c.NEAREST;case THREE.NearestMipMapNearestFilter:return c.NEAREST_MIPMAP_NEAREST;case THREE.NearestMipMapLinearFilter:return c.NEAREST_MIPMAP_LINEAR;case THREE.LinearFilter:return c.LINEAR;
case THREE.LinearMipMapNearestFilter:return c.LINEAR_MIPMAP_NEAREST;case THREE.LinearMipMapLinearFilter:return c.LINEAR_MIPMAP_LINEAR}return 0}var o=document.createElement("canvas"),c,D,w,z=new THREE.Matrix4,P,T=new Float32Array(16),R=new Float32Array(16),s=new Float32Array(16),O=new Float32Array(9),B=new Float32Array(16),I=function(e,i){if(e){var g,k,j,l=pointLights=maxDirLights=maxPointLights=0;g=0;for(k=e.lights.length;g<k;g++){j=e.lights[g];j instanceof THREE.DirectionalLight&&l++;j instanceof
THREE.PointLight&&pointLights++}if(pointLights+l<=i){maxDirLights=l;maxPointLights=pointLights}else{maxDirLights=Math.ceil(i*l/(pointLights+l));maxPointLights=i-maxDirLights}return{directional:maxDirLights,point:maxPointLights}}return{directional:1,point:i-1}}(a.scene,4);fog=a.scene?a.scene.fog:null;antialias=a.antialias!=undefined?a.antialias:true;clearColor=a.clearColor?new THREE.Color(a.clearColor):new THREE.Color(0);clearAlpha=a.clearAlpha?a.clearAlpha:0;this.domElement=o;this.autoClear=true;
(function(e,i,g){try{c=o.getContext("experimental-webgl",{antialias:e})}catch(k){}if(!c){alert("WebGL not supported");throw"cannot create webgl context";}c.clearColor(0,0,0,1);c.clearDepth(1);c.enable(c.DEPTH_TEST);c.depthFunc(c.LEQUAL);c.frontFace(c.CCW);c.cullFace(c.BACK);c.enable(c.CULL_FACE);c.enable(c.BLEND);c.blendFunc(c.ONE,c.ONE_MINUS_SRC_ALPHA);c.clearColor(i.r,i.g,i.b,g)})(antialias,clearColor,clearAlpha);D=w=function(e,i,g){var k=[e?"#define MAX_DIR_LIGHTS "+e:"",i?"#define MAX_POINT_LIGHTS "+
i:"","uniform bool enableLighting;\nuniform bool useRefract;\nuniform int pointLightNumber;\nuniform int directionalLightNumber;\nuniform vec3 ambientLightColor;",e?"uniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];":"",e?"uniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];":"",i?"uniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];":"",i?"uniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];":"","varying vec3 vNormal;\nvarying vec2 vUv;\nvarying vec3 vLightWeighting;",i?"varying vec3 vPointLightVector[ MAX_POINT_LIGHTS ];":
"","varying vec3 vViewPosition;\nvarying vec3 vReflect;\nuniform float mRefractionRatio;\nvoid main(void) {\nvec4 mPosition = objectMatrix * vec4( position, 1.0 );\nvViewPosition = cameraPosition - mPosition.xyz;\nvec3 nWorld = mat3( objectMatrix[0].xyz, objectMatrix[1].xyz, objectMatrix[2].xyz ) * normal;\nvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\nvec3 transformedNormal = normalize( normalMatrix * normal );\nif ( !enableLighting ) {\nvLightWeighting = vec3( 1.0, 1.0, 1.0 );\n} else {\nvLightWeighting = ambientLightColor;",
THREE.WebGLRenderer=function(a){function b(e,i){e.fragment_shader=i.fragment_shader;e.vertex_shader=i.vertex_shader;var g=i.uniforms,k,j,l={};for(k in g){l[k]={};for(j in g[k]){parameter_src=g[k][j];l[k][j]=parameter_src instanceof THREE.Color||parameter_src instanceof THREE.Vector3||parameter_src instanceof THREE.Texture?parameter_src.clone():parameter_src}}e.uniforms=l}function f(e,i,g){var k=c.createProgram();g=["#ifdef GL_ES\nprecision highp float;\n#endif",g?"#define USE_FOG":"",g instanceof
THREE.FogExp2?"#define FOG_EXP2":"","uniform mat4 viewMatrix;\nuniform vec3 cameraPosition;\n"].join("\n");var j=[c.getParameter(c.MAX_VERTEX_TEXTURE_IMAGE_UNITS)>0?"#define VERTEX_TEXTURES":"","uniform mat4 objectMatrix;\nuniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform mat4 viewMatrix;\nuniform mat3 normalMatrix;\nuniform vec3 cameraPosition;\nattribute vec3 position;\nattribute vec3 normal;\nattribute vec2 uv;\n"].join("\n");c.attachShader(k,t("fragment",g+e));c.attachShader(k,
t("vertex",j+i));c.linkProgram(k);c.getProgramParameter(k,c.LINK_STATUS)||alert("Could not initialise shaders\nVALIDATE_STATUS: "+c.getProgramParameter(k,c.VALIDATE_STATUS)+", gl error ["+c.getError()+"]");k.uniforms={};k.attributes={};return k}function d(e,i){if(e.image.length==6){if(!e.image.__webGLTextureCube&&!e.image.__cubeMapInitialized&&e.image.loadCount==6){e.image.__webGLTextureCube=c.createTexture();c.bindTexture(c.TEXTURE_CUBE_MAP,e.image.__webGLTextureCube);c.texParameteri(c.TEXTURE_CUBE_MAP,
c.TEXTURE_WRAP_S,c.CLAMP_TO_EDGE);c.texParameteri(c.TEXTURE_CUBE_MAP,c.TEXTURE_WRAP_T,c.CLAMP_TO_EDGE);c.texParameteri(c.TEXTURE_CUBE_MAP,c.TEXTURE_MAG_FILTER,c.LINEAR);c.texParameteri(c.TEXTURE_CUBE_MAP,c.TEXTURE_MIN_FILTER,c.LINEAR_MIPMAP_LINEAR);for(var g=0;g<6;++g)c.texImage2D(c.TEXTURE_CUBE_MAP_POSITIVE_X+g,0,c.RGBA,c.RGBA,c.UNSIGNED_BYTE,e.image[g]);c.generateMipmap(c.TEXTURE_CUBE_MAP);c.bindTexture(c.TEXTURE_CUBE_MAP,null);e.image.__cubeMapInitialized=true}c.activeTexture(c.TEXTURE0+i);c.bindTexture(c.TEXTURE_CUBE_MAP,
e.image.__webGLTextureCube)}}function h(e,i){if(!e.__webGLTexture&&e.image.loaded){e.__webGLTexture=c.createTexture();c.bindTexture(c.TEXTURE_2D,e.__webGLTexture);c.texImage2D(c.TEXTURE_2D,0,c.RGBA,c.RGBA,c.UNSIGNED_BYTE,e.image);c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_S,n(e.wrap_s));c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_T,n(e.wrap_t));c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MAG_FILTER,n(e.mag_filter));c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MIN_FILTER,n(e.min_filter));c.generateMipmap(c.TEXTURE_2D);
c.bindTexture(c.TEXTURE_2D,null)}c.activeTexture(c.TEXTURE0+i);c.bindTexture(c.TEXTURE_2D,e.__webGLTexture)}function m(e,i){var g,k,j;g=0;for(k=i.length;g<k;g++){j=i[g];e.uniforms[j]=c.getUniformLocation(e,j)}}function q(e,i){var g,k,j;g=0;for(k=i.length;g<k;g++){j=i[g];e.attributes[j]=c.getAttribLocation(e,j)}}function t(e,i){var g;if(e=="fragment")g=c.createShader(c.FRAGMENT_SHADER);else if(e=="vertex")g=c.createShader(c.VERTEX_SHADER);c.shaderSource(g,i);c.compileShader(g);if(!c.getShaderParameter(g,
c.COMPILE_STATUS)){alert(c.getShaderInfoLog(g));return null}return g}function n(e){switch(e){case THREE.RepeatWrapping:return c.REPEAT;case THREE.ClampToEdgeWrapping:return c.CLAMP_TO_EDGE;case THREE.MirroredRepeatWrapping:return c.MIRRORED_REPEAT;case THREE.NearestFilter:return c.NEAREST;case THREE.NearestMipMapNearestFilter:return c.NEAREST_MIPMAP_NEAREST;case THREE.NearestMipMapLinearFilter:return c.NEAREST_MIPMAP_LINEAR;case THREE.LinearFilter:return c.LINEAR;case THREE.LinearMipMapNearestFilter:return c.LINEAR_MIPMAP_NEAREST;
case THREE.LinearMipMapLinearFilter:return c.LINEAR_MIPMAP_LINEAR}return 0}var o=document.createElement("canvas"),c,D,w,z=new THREE.Matrix4,P,T=new Float32Array(16),R=new Float32Array(16),s=new Float32Array(16),O=new Float32Array(9),B=new Float32Array(16),I=function(e,i){if(e){var g,k,j,l=pointLights=maxDirLights=maxPointLights=0;g=0;for(k=e.lights.length;g<k;g++){j=e.lights[g];j instanceof THREE.DirectionalLight&&l++;j instanceof THREE.PointLight&&pointLights++}if(pointLights+l<=i){maxDirLights=
l;maxPointLights=pointLights}else{maxDirLights=Math.ceil(i*l/(pointLights+l));maxPointLights=i-maxDirLights}return{directional:maxDirLights,point:maxPointLights}}return{directional:1,point:i-1}}(a.scene,4);fog=a.scene?a.scene.fog:null;antialias=a.antialias!=undefined?a.antialias:true;clearColor=a.clearColor?new THREE.Color(a.clearColor):new THREE.Color(0);clearAlpha=a.clearAlpha?a.clearAlpha:0;this.domElement=o;this.autoClear=true;(function(e,i,g){try{c=o.getContext("experimental-webgl",{antialias:e})}catch(k){}if(!c){alert("WebGL not supported");
throw"cannot create webgl context";}c.clearColor(0,0,0,1);c.clearDepth(1);c.enable(c.DEPTH_TEST);c.depthFunc(c.LEQUAL);c.frontFace(c.CCW);c.cullFace(c.BACK);c.enable(c.CULL_FACE);c.enable(c.BLEND);c.blendFunc(c.ONE,c.ONE_MINUS_SRC_ALPHA);c.clearColor(i.r,i.g,i.b,g)})(antialias,clearColor,clearAlpha);D=w=function(e,i,g){var k=[e?"#define MAX_DIR_LIGHTS "+e:"",i?"#define MAX_POINT_LIGHTS "+i:"","uniform bool enableLighting;\nuniform bool useRefract;\nuniform int pointLightNumber;\nuniform int directionalLightNumber;\nuniform vec3 ambientLightColor;",
e?"uniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];":"",e?"uniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];":"",i?"uniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];":"",i?"uniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];":"","varying vec3 vNormal;\nvarying vec2 vUv;\nvarying vec3 vLightWeighting;",i?"varying vec3 vPointLightVector[ MAX_POINT_LIGHTS ];":"","varying vec3 vViewPosition;\nvarying vec3 vReflect;\nuniform float mRefractionRatio;\nvoid main(void) {\nvec4 mPosition = objectMatrix * vec4( position, 1.0 );\nvViewPosition = cameraPosition - mPosition.xyz;\nvec3 nWorld = mat3( objectMatrix[0].xyz, objectMatrix[1].xyz, objectMatrix[2].xyz ) * normal;\nvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\nvec3 transformedNormal = normalize( normalMatrix * normal );\nif ( !enableLighting ) {\nvLightWeighting = vec3( 1.0, 1.0, 1.0 );\n} else {\nvLightWeighting = ambientLightColor;",
e?"for( int i = 0; i < MAX_DIR_LIGHTS; i++ ) {":"",e?"vec4 lDirection = viewMatrix * vec4( directionalLightDirection[ i ], 0.0 );":"",e?"float directionalLightWeighting = max( dot( transformedNormal, normalize( lDirection.xyz ) ), 0.0 );":"",e?"vLightWeighting += directionalLightColor[ i ] * directionalLightWeighting;":"",e?"}":"",i?"for( int i = 0; i < MAX_POINT_LIGHTS; i++ ) {":"",i?"vec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );":"",i?"vPointLightVector[ i ] = normalize( lPosition.xyz - mvPosition.xyz );":
"",i?"float pointLightWeighting = max( dot( transformedNormal, vPointLightVector[ i ] ), 0.0 );":"",i?"vLightWeighting += pointLightColor[ i ] * pointLightWeighting;":"",i?"}":"","}\nvNormal = transformedNormal;\nvUv = uv;\nif ( useRefract ) {\nvReflect = refract( normalize(mPosition.xyz - cameraPosition), normalize(nWorld.xyz), mRefractionRatio );\n} else {\nvReflect = reflect( normalize(mPosition.xyz - cameraPosition), normalize(nWorld.xyz) );\n}\ngl_Position = projectionMatrix * mvPosition;\n}"].join("\n"),
j=[e?"#define MAX_DIR_LIGHTS "+e:"",i?"#define MAX_POINT_LIGHTS "+i:"","uniform int material;\nuniform bool enableMap;\nuniform bool enableCubeMap;\nuniform bool mixEnvMap;\nuniform samplerCube tCube;\nuniform float mReflectivity;\nuniform sampler2D tMap;\nuniform vec4 mColor;\nuniform float mOpacity;\nuniform vec4 mAmbient;\nuniform vec4 mSpecular;\nuniform float mShininess;\n#ifdef USE_FOG\nuniform vec3 fogColor;\n#ifdef FOG_EXP2\nuniform float fogDensity;\n#else\nuniform float fogNear;\nuniform float fogFar;\n#endif\n#endif\nuniform int pointLightNumber;\nuniform int directionalLightNumber;",
......
......@@ -141,18 +141,17 @@ Q.color;r.setAttribute("style","fill: "+B.__styleString)}t.appendChild(r)}}else
THREE.RenderableFace3){x=C.v1;z=C.v2;P=C.v3;x.positionScreen.x*=c;x.positionScreen.y*=-D;z.positionScreen.x*=c;z.positionScreen.y*=-D;P.positionScreen.x*=c;P.positionScreen.y*=-D;s.addPoint(x.positionScreen.x,x.positionScreen.y);s.addPoint(z.positionScreen.x,z.positionScreen.y);s.addPoint(P.positionScreen.x,P.positionScreen.y);if(R.instersects(s)){L=0;for(y=C.meshMaterials.length;L<y;){Q=C.meshMaterials[L++];if(Q instanceof THREE.MeshFaceMaterial){I=0;for(S=C.faceMaterials.length;I<S;)(Q=C.faceMaterials[I++])&&
b(x,z,P,C,Q,H)}else Q&&b(x,z,P,C,Q,H)}}}else if(C instanceof THREE.RenderableFace4){x=C.v1;z=C.v2;P=C.v3;T=C.v4;x.positionScreen.x*=c;x.positionScreen.y*=-D;z.positionScreen.x*=c;z.positionScreen.y*=-D;P.positionScreen.x*=c;P.positionScreen.y*=-D;T.positionScreen.x*=c;T.positionScreen.y*=-D;s.addPoint(x.positionScreen.x,x.positionScreen.y);s.addPoint(z.positionScreen.x,z.positionScreen.y);s.addPoint(P.positionScreen.x,P.positionScreen.y);s.addPoint(T.positionScreen.x,T.positionScreen.y);if(R.instersects(s)){L=
0;for(y=C.meshMaterials.length;L<y;){Q=C.meshMaterials[L++];if(Q instanceof THREE.MeshFaceMaterial){I=0;for(S=C.faceMaterials.length;I<S;)(Q=C.faceMaterials[I++])&&f(x,z,P,T,C,Q,H)}else Q&&f(x,z,P,T,C,Q,H)}}}}}};
THREE.WebGLRenderer=function(a){function b(e,i){e.fragment_shader=i.fragment_shader;e.vertex_shader=i.vertex_shader;var g=i.uniforms,k,j,l={};for(k in g){l[k]={};for(j in uniforms[k]){parameter_src=g[k][j];parameter_dst=l[k][j];parameter_dst=parameter_src instanceof THREE.Color||parameter_src instanceof THREE.Vector3||parameter_src instanceof THREE.Texture?parameter_src.clone():parameter_src}}e.uniforms=l}function f(e,i,g){var k=c.createProgram();g=["#ifdef GL_ES\nprecision highp float;\n#endif",
g?"#define USE_FOG":"",g instanceof THREE.FogExp2?"#define FOG_EXP2":"","uniform mat4 viewMatrix;\nuniform vec3 cameraPosition;\n"].join("\n");var j=[c.getParameter(c.MAX_VERTEX_TEXTURE_IMAGE_UNITS)>0?"#define VERTEX_TEXTURES":"","uniform mat4 objectMatrix;\nuniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform mat4 viewMatrix;\nuniform mat3 normalMatrix;\nuniform vec3 cameraPosition;\nattribute vec3 position;\nattribute vec3 normal;\nattribute vec2 uv;\n"].join("\n");c.attachShader(k,
t("fragment",g+e));c.attachShader(k,t("vertex",j+i));c.linkProgram(k);c.getProgramParameter(k,c.LINK_STATUS)||alert("Could not initialise shaders\nVALIDATE_STATUS: "+c.getProgramParameter(k,c.VALIDATE_STATUS)+", gl error ["+c.getError()+"]");k.uniforms={};k.attributes={};return k}function d(e,i){if(e.image.length==6){if(!e.image.__webGLTextureCube&&!e.image.__cubeMapInitialized&&e.image.loadCount==6){e.image.__webGLTextureCube=c.createTexture();c.bindTexture(c.TEXTURE_CUBE_MAP,e.image.__webGLTextureCube);
c.texParameteri(c.TEXTURE_CUBE_MAP,c.TEXTURE_WRAP_S,c.CLAMP_TO_EDGE);c.texParameteri(c.TEXTURE_CUBE_MAP,c.TEXTURE_WRAP_T,c.CLAMP_TO_EDGE);c.texParameteri(c.TEXTURE_CUBE_MAP,c.TEXTURE_MAG_FILTER,c.LINEAR);c.texParameteri(c.TEXTURE_CUBE_MAP,c.TEXTURE_MIN_FILTER,c.LINEAR_MIPMAP_LINEAR);for(var g=0;g<6;++g)c.texImage2D(c.TEXTURE_CUBE_MAP_POSITIVE_X+g,0,c.RGBA,c.RGBA,c.UNSIGNED_BYTE,e.image[g]);c.generateMipmap(c.TEXTURE_CUBE_MAP);c.bindTexture(c.TEXTURE_CUBE_MAP,null);e.image.__cubeMapInitialized=true}c.activeTexture(c.TEXTURE0+
i);c.bindTexture(c.TEXTURE_CUBE_MAP,e.image.__webGLTextureCube)}}function h(e,i){if(!e.__webGLTexture&&e.image.loaded){e.__webGLTexture=c.createTexture();c.bindTexture(c.TEXTURE_2D,e.__webGLTexture);c.texImage2D(c.TEXTURE_2D,0,c.RGBA,c.RGBA,c.UNSIGNED_BYTE,e.image);c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_S,n(e.wrap_s));c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_T,n(e.wrap_t));c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MAG_FILTER,n(e.mag_filter));c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MIN_FILTER,
n(e.min_filter));c.generateMipmap(c.TEXTURE_2D);c.bindTexture(c.TEXTURE_2D,null)}c.activeTexture(c.TEXTURE0+i);c.bindTexture(c.TEXTURE_2D,e.__webGLTexture)}function m(e,i){var g,k,j;g=0;for(k=i.length;g<k;g++){j=i[g];e.uniforms[j]=c.getUniformLocation(e,j)}}function q(e,i){var g,k,j;g=0;for(k=i.length;g<k;g++){j=i[g];e.attributes[j]=c.getAttribLocation(e,j)}}function t(e,i){var g;if(e=="fragment")g=c.createShader(c.FRAGMENT_SHADER);else if(e=="vertex")g=c.createShader(c.VERTEX_SHADER);c.shaderSource(g,
i);c.compileShader(g);if(!c.getShaderParameter(g,c.COMPILE_STATUS)){alert(c.getShaderInfoLog(g));return null}return g}function n(e){switch(e){case THREE.RepeatWrapping:return c.REPEAT;case THREE.ClampToEdgeWrapping:return c.CLAMP_TO_EDGE;case THREE.MirroredRepeatWrapping:return c.MIRRORED_REPEAT;case THREE.NearestFilter:return c.NEAREST;case THREE.NearestMipMapNearestFilter:return c.NEAREST_MIPMAP_NEAREST;case THREE.NearestMipMapLinearFilter:return c.NEAREST_MIPMAP_LINEAR;case THREE.LinearFilter:return c.LINEAR;
case THREE.LinearMipMapNearestFilter:return c.LINEAR_MIPMAP_NEAREST;case THREE.LinearMipMapLinearFilter:return c.LINEAR_MIPMAP_LINEAR}return 0}var o=document.createElement("canvas"),c,D,x,z=new THREE.Matrix4,P,T=new Float32Array(16),R=new Float32Array(16),s=new Float32Array(16),O=new Float32Array(9),B=new Float32Array(16),J=function(e,i){if(e){var g,k,j,l=pointLights=maxDirLights=maxPointLights=0;g=0;for(k=e.lights.length;g<k;g++){j=e.lights[g];j instanceof THREE.DirectionalLight&&l++;j instanceof
THREE.PointLight&&pointLights++}if(pointLights+l<=i){maxDirLights=l;maxPointLights=pointLights}else{maxDirLights=Math.ceil(i*l/(pointLights+l));maxPointLights=i-maxDirLights}return{directional:maxDirLights,point:maxPointLights}}return{directional:1,point:i-1}}(a.scene,4);fog=a.scene?a.scene.fog:null;antialias=a.antialias!=undefined?a.antialias:true;clearColor=a.clearColor?new THREE.Color(a.clearColor):new THREE.Color(0);clearAlpha=a.clearAlpha?a.clearAlpha:0;this.domElement=o;this.autoClear=true;
(function(e,i,g){try{c=o.getContext("experimental-webgl",{antialias:e})}catch(k){}if(!c){alert("WebGL not supported");throw"cannot create webgl context";}c.clearColor(0,0,0,1);c.clearDepth(1);c.enable(c.DEPTH_TEST);c.depthFunc(c.LEQUAL);c.frontFace(c.CCW);c.cullFace(c.BACK);c.enable(c.CULL_FACE);c.enable(c.BLEND);c.blendFunc(c.ONE,c.ONE_MINUS_SRC_ALPHA);c.clearColor(i.r,i.g,i.b,g)})(antialias,clearColor,clearAlpha);D=x=function(e,i,g){var k=[e?"#define MAX_DIR_LIGHTS "+e:"",i?"#define MAX_POINT_LIGHTS "+
i:"","uniform bool enableLighting;\nuniform bool useRefract;\nuniform int pointLightNumber;\nuniform int directionalLightNumber;\nuniform vec3 ambientLightColor;",e?"uniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];":"",e?"uniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];":"",i?"uniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];":"",i?"uniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];":"","varying vec3 vNormal;\nvarying vec2 vUv;\nvarying vec3 vLightWeighting;",i?"varying vec3 vPointLightVector[ MAX_POINT_LIGHTS ];":
"","varying vec3 vViewPosition;\nvarying vec3 vReflect;\nuniform float mRefractionRatio;\nvoid main(void) {\nvec4 mPosition = objectMatrix * vec4( position, 1.0 );\nvViewPosition = cameraPosition - mPosition.xyz;\nvec3 nWorld = mat3( objectMatrix[0].xyz, objectMatrix[1].xyz, objectMatrix[2].xyz ) * normal;\nvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\nvec3 transformedNormal = normalize( normalMatrix * normal );\nif ( !enableLighting ) {\nvLightWeighting = vec3( 1.0, 1.0, 1.0 );\n} else {\nvLightWeighting = ambientLightColor;",
THREE.WebGLRenderer=function(a){function b(e,i){e.fragment_shader=i.fragment_shader;e.vertex_shader=i.vertex_shader;var g=i.uniforms,k,j,l={};for(k in g){l[k]={};for(j in g[k]){parameter_src=g[k][j];l[k][j]=parameter_src instanceof THREE.Color||parameter_src instanceof THREE.Vector3||parameter_src instanceof THREE.Texture?parameter_src.clone():parameter_src}}e.uniforms=l}function f(e,i,g){var k=c.createProgram();g=["#ifdef GL_ES\nprecision highp float;\n#endif",g?"#define USE_FOG":"",g instanceof
THREE.FogExp2?"#define FOG_EXP2":"","uniform mat4 viewMatrix;\nuniform vec3 cameraPosition;\n"].join("\n");var j=[c.getParameter(c.MAX_VERTEX_TEXTURE_IMAGE_UNITS)>0?"#define VERTEX_TEXTURES":"","uniform mat4 objectMatrix;\nuniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform mat4 viewMatrix;\nuniform mat3 normalMatrix;\nuniform vec3 cameraPosition;\nattribute vec3 position;\nattribute vec3 normal;\nattribute vec2 uv;\n"].join("\n");c.attachShader(k,t("fragment",g+e));c.attachShader(k,
t("vertex",j+i));c.linkProgram(k);c.getProgramParameter(k,c.LINK_STATUS)||alert("Could not initialise shaders\nVALIDATE_STATUS: "+c.getProgramParameter(k,c.VALIDATE_STATUS)+", gl error ["+c.getError()+"]");k.uniforms={};k.attributes={};return k}function d(e,i){if(e.image.length==6){if(!e.image.__webGLTextureCube&&!e.image.__cubeMapInitialized&&e.image.loadCount==6){e.image.__webGLTextureCube=c.createTexture();c.bindTexture(c.TEXTURE_CUBE_MAP,e.image.__webGLTextureCube);c.texParameteri(c.TEXTURE_CUBE_MAP,
c.TEXTURE_WRAP_S,c.CLAMP_TO_EDGE);c.texParameteri(c.TEXTURE_CUBE_MAP,c.TEXTURE_WRAP_T,c.CLAMP_TO_EDGE);c.texParameteri(c.TEXTURE_CUBE_MAP,c.TEXTURE_MAG_FILTER,c.LINEAR);c.texParameteri(c.TEXTURE_CUBE_MAP,c.TEXTURE_MIN_FILTER,c.LINEAR_MIPMAP_LINEAR);for(var g=0;g<6;++g)c.texImage2D(c.TEXTURE_CUBE_MAP_POSITIVE_X+g,0,c.RGBA,c.RGBA,c.UNSIGNED_BYTE,e.image[g]);c.generateMipmap(c.TEXTURE_CUBE_MAP);c.bindTexture(c.TEXTURE_CUBE_MAP,null);e.image.__cubeMapInitialized=true}c.activeTexture(c.TEXTURE0+i);c.bindTexture(c.TEXTURE_CUBE_MAP,
e.image.__webGLTextureCube)}}function h(e,i){if(!e.__webGLTexture&&e.image.loaded){e.__webGLTexture=c.createTexture();c.bindTexture(c.TEXTURE_2D,e.__webGLTexture);c.texImage2D(c.TEXTURE_2D,0,c.RGBA,c.RGBA,c.UNSIGNED_BYTE,e.image);c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_S,n(e.wrap_s));c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_T,n(e.wrap_t));c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MAG_FILTER,n(e.mag_filter));c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MIN_FILTER,n(e.min_filter));c.generateMipmap(c.TEXTURE_2D);
c.bindTexture(c.TEXTURE_2D,null)}c.activeTexture(c.TEXTURE0+i);c.bindTexture(c.TEXTURE_2D,e.__webGLTexture)}function m(e,i){var g,k,j;g=0;for(k=i.length;g<k;g++){j=i[g];e.uniforms[j]=c.getUniformLocation(e,j)}}function q(e,i){var g,k,j;g=0;for(k=i.length;g<k;g++){j=i[g];e.attributes[j]=c.getAttribLocation(e,j)}}function t(e,i){var g;if(e=="fragment")g=c.createShader(c.FRAGMENT_SHADER);else if(e=="vertex")g=c.createShader(c.VERTEX_SHADER);c.shaderSource(g,i);c.compileShader(g);if(!c.getShaderParameter(g,
c.COMPILE_STATUS)){alert(c.getShaderInfoLog(g));return null}return g}function n(e){switch(e){case THREE.RepeatWrapping:return c.REPEAT;case THREE.ClampToEdgeWrapping:return c.CLAMP_TO_EDGE;case THREE.MirroredRepeatWrapping:return c.MIRRORED_REPEAT;case THREE.NearestFilter:return c.NEAREST;case THREE.NearestMipMapNearestFilter:return c.NEAREST_MIPMAP_NEAREST;case THREE.NearestMipMapLinearFilter:return c.NEAREST_MIPMAP_LINEAR;case THREE.LinearFilter:return c.LINEAR;case THREE.LinearMipMapNearestFilter:return c.LINEAR_MIPMAP_NEAREST;
case THREE.LinearMipMapLinearFilter:return c.LINEAR_MIPMAP_LINEAR}return 0}var o=document.createElement("canvas"),c,D,x,z=new THREE.Matrix4,P,T=new Float32Array(16),R=new Float32Array(16),s=new Float32Array(16),O=new Float32Array(9),B=new Float32Array(16),J=function(e,i){if(e){var g,k,j,l=pointLights=maxDirLights=maxPointLights=0;g=0;for(k=e.lights.length;g<k;g++){j=e.lights[g];j instanceof THREE.DirectionalLight&&l++;j instanceof THREE.PointLight&&pointLights++}if(pointLights+l<=i){maxDirLights=
l;maxPointLights=pointLights}else{maxDirLights=Math.ceil(i*l/(pointLights+l));maxPointLights=i-maxDirLights}return{directional:maxDirLights,point:maxPointLights}}return{directional:1,point:i-1}}(a.scene,4);fog=a.scene?a.scene.fog:null;antialias=a.antialias!=undefined?a.antialias:true;clearColor=a.clearColor?new THREE.Color(a.clearColor):new THREE.Color(0);clearAlpha=a.clearAlpha?a.clearAlpha:0;this.domElement=o;this.autoClear=true;(function(e,i,g){try{c=o.getContext("experimental-webgl",{antialias:e})}catch(k){}if(!c){alert("WebGL not supported");
throw"cannot create webgl context";}c.clearColor(0,0,0,1);c.clearDepth(1);c.enable(c.DEPTH_TEST);c.depthFunc(c.LEQUAL);c.frontFace(c.CCW);c.cullFace(c.BACK);c.enable(c.CULL_FACE);c.enable(c.BLEND);c.blendFunc(c.ONE,c.ONE_MINUS_SRC_ALPHA);c.clearColor(i.r,i.g,i.b,g)})(antialias,clearColor,clearAlpha);D=x=function(e,i,g){var k=[e?"#define MAX_DIR_LIGHTS "+e:"",i?"#define MAX_POINT_LIGHTS "+i:"","uniform bool enableLighting;\nuniform bool useRefract;\nuniform int pointLightNumber;\nuniform int directionalLightNumber;\nuniform vec3 ambientLightColor;",
e?"uniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];":"",e?"uniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];":"",i?"uniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];":"",i?"uniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];":"","varying vec3 vNormal;\nvarying vec2 vUv;\nvarying vec3 vLightWeighting;",i?"varying vec3 vPointLightVector[ MAX_POINT_LIGHTS ];":"","varying vec3 vViewPosition;\nvarying vec3 vReflect;\nuniform float mRefractionRatio;\nvoid main(void) {\nvec4 mPosition = objectMatrix * vec4( position, 1.0 );\nvViewPosition = cameraPosition - mPosition.xyz;\nvec3 nWorld = mat3( objectMatrix[0].xyz, objectMatrix[1].xyz, objectMatrix[2].xyz ) * normal;\nvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\nvec3 transformedNormal = normalize( normalMatrix * normal );\nif ( !enableLighting ) {\nvLightWeighting = vec3( 1.0, 1.0, 1.0 );\n} else {\nvLightWeighting = ambientLightColor;",
e?"for( int i = 0; i < MAX_DIR_LIGHTS; i++ ) {":"",e?"vec4 lDirection = viewMatrix * vec4( directionalLightDirection[ i ], 0.0 );":"",e?"float directionalLightWeighting = max( dot( transformedNormal, normalize( lDirection.xyz ) ), 0.0 );":"",e?"vLightWeighting += directionalLightColor[ i ] * directionalLightWeighting;":"",e?"}":"",i?"for( int i = 0; i < MAX_POINT_LIGHTS; i++ ) {":"",i?"vec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );":"",i?"vPointLightVector[ i ] = normalize( lPosition.xyz - mvPosition.xyz );":
"",i?"float pointLightWeighting = max( dot( transformedNormal, vPointLightVector[ i ] ), 0.0 );":"",i?"vLightWeighting += pointLightColor[ i ] * pointLightWeighting;":"",i?"}":"","}\nvNormal = transformedNormal;\nvUv = uv;\nif ( useRefract ) {\nvReflect = refract( normalize(mPosition.xyz - cameraPosition), normalize(nWorld.xyz), mRefractionRatio );\n} else {\nvReflect = reflect( normalize(mPosition.xyz - cameraPosition), normalize(nWorld.xyz) );\n}\ngl_Position = projectionMatrix * mvPosition;\n}"].join("\n"),
j=[e?"#define MAX_DIR_LIGHTS "+e:"",i?"#define MAX_POINT_LIGHTS "+i:"","uniform int material;\nuniform bool enableMap;\nuniform bool enableCubeMap;\nuniform bool mixEnvMap;\nuniform samplerCube tCube;\nuniform float mReflectivity;\nuniform sampler2D tMap;\nuniform vec4 mColor;\nuniform float mOpacity;\nuniform vec4 mAmbient;\nuniform vec4 mSpecular;\nuniform float mShininess;\n#ifdef USE_FOG\nuniform vec3 fogColor;\n#ifdef FOG_EXP2\nuniform float fogDensity;\n#else\nuniform float fogNear;\nuniform float fogFar;\n#endif\n#endif\nuniform int pointLightNumber;\nuniform int directionalLightNumber;",
......
......@@ -140,18 +140,17 @@ z.color;y.setAttribute("style","fill: "+m.__styleString)}i.appendChild(y)}}else
THREE.RenderableFace3){u=s.v1;x=s.v2;A=s.v3;u.positionScreen.x*=c;u.positionScreen.y*=-D;x.positionScreen.x*=c;x.positionScreen.y*=-D;A.positionScreen.x*=c;A.positionScreen.y*=-D;v.addPoint(u.positionScreen.x,u.positionScreen.y);v.addPoint(x.positionScreen.x,x.positionScreen.y);v.addPoint(A.positionScreen.x,A.positionScreen.y);if(K.instersects(v)){S=0;for(H=s.meshMaterials.length;S<H;){z=s.meshMaterials[S++];if(z instanceof THREE.MeshFaceMaterial){R=0;for(q=s.faceMaterials.length;R<q;)(z=s.faceMaterials[R++])&&
b(u,x,A,s,z,Q)}else z&&b(u,x,A,s,z,Q)}}}else if(s instanceof THREE.RenderableFace4){u=s.v1;x=s.v2;A=s.v3;B=s.v4;u.positionScreen.x*=c;u.positionScreen.y*=-D;x.positionScreen.x*=c;x.positionScreen.y*=-D;A.positionScreen.x*=c;A.positionScreen.y*=-D;B.positionScreen.x*=c;B.positionScreen.y*=-D;v.addPoint(u.positionScreen.x,u.positionScreen.y);v.addPoint(x.positionScreen.x,x.positionScreen.y);v.addPoint(A.positionScreen.x,A.positionScreen.y);v.addPoint(B.positionScreen.x,B.positionScreen.y);if(K.instersects(v)){S=
0;for(H=s.meshMaterials.length;S<H;){z=s.meshMaterials[S++];if(z instanceof THREE.MeshFaceMaterial){R=0;for(q=s.faceMaterials.length;R<q;)(z=s.faceMaterials[R++])&&e(u,x,A,B,s,z,Q)}else z&&e(u,x,A,B,s,z,Q)}}}}}};
THREE.WebGLRenderer=function(a){function b(j,o){j.fragment_shader=o.fragment_shader;j.vertex_shader=o.vertex_shader;var l=o.uniforms,p,r,t={};for(p in l){t[p]={};for(r in uniforms[p]){parameter_src=l[p][r];parameter_dst=t[p][r];parameter_dst=parameter_src instanceof THREE.Color||parameter_src instanceof THREE.Vector3||parameter_src instanceof THREE.Texture?parameter_src.clone():parameter_src}}j.uniforms=t}function e(j,o,l){var p=c.createProgram();l=["#ifdef GL_ES\nprecision highp float;\n#endif",
l?"#define USE_FOG":"",l instanceof THREE.FogExp2?"#define FOG_EXP2":"","uniform mat4 viewMatrix;\nuniform vec3 cameraPosition;\n"].join("\n");var r=[c.getParameter(c.MAX_VERTEX_TEXTURE_IMAGE_UNITS)>0?"#define VERTEX_TEXTURES":"","uniform mat4 objectMatrix;\nuniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform mat4 viewMatrix;\nuniform mat3 normalMatrix;\nuniform vec3 cameraPosition;\nattribute vec3 position;\nattribute vec3 normal;\nattribute vec2 uv;\n"].join("\n");c.attachShader(p,
i("fragment",l+j));c.attachShader(p,i("vertex",r+o));c.linkProgram(p);c.getProgramParameter(p,c.LINK_STATUS)||alert("Could not initialise shaders\nVALIDATE_STATUS: "+c.getProgramParameter(p,c.VALIDATE_STATUS)+", gl error ["+c.getError()+"]");p.uniforms={};p.attributes={};return p}function d(j,o){if(j.image.length==6){if(!j.image.__webGLTextureCube&&!j.image.__cubeMapInitialized&&j.image.loadCount==6){j.image.__webGLTextureCube=c.createTexture();c.bindTexture(c.TEXTURE_CUBE_MAP,j.image.__webGLTextureCube);
c.texParameteri(c.TEXTURE_CUBE_MAP,c.TEXTURE_WRAP_S,c.CLAMP_TO_EDGE);c.texParameteri(c.TEXTURE_CUBE_MAP,c.TEXTURE_WRAP_T,c.CLAMP_TO_EDGE);c.texParameteri(c.TEXTURE_CUBE_MAP,c.TEXTURE_MAG_FILTER,c.LINEAR);c.texParameteri(c.TEXTURE_CUBE_MAP,c.TEXTURE_MIN_FILTER,c.LINEAR_MIPMAP_LINEAR);for(var l=0;l<6;++l)c.texImage2D(c.TEXTURE_CUBE_MAP_POSITIVE_X+l,0,c.RGBA,c.RGBA,c.UNSIGNED_BYTE,j.image[l]);c.generateMipmap(c.TEXTURE_CUBE_MAP);c.bindTexture(c.TEXTURE_CUBE_MAP,null);j.image.__cubeMapInitialized=true}c.activeTexture(c.TEXTURE0+
o);c.bindTexture(c.TEXTURE_CUBE_MAP,j.image.__webGLTextureCube)}}function f(j,o){if(!j.__webGLTexture&&j.image.loaded){j.__webGLTexture=c.createTexture();c.bindTexture(c.TEXTURE_2D,j.__webGLTexture);c.texImage2D(c.TEXTURE_2D,0,c.RGBA,c.RGBA,c.UNSIGNED_BYTE,j.image);c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_S,h(j.wrap_s));c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_T,h(j.wrap_t));c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MAG_FILTER,h(j.mag_filter));c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MIN_FILTER,
h(j.min_filter));c.generateMipmap(c.TEXTURE_2D);c.bindTexture(c.TEXTURE_2D,null)}c.activeTexture(c.TEXTURE0+o);c.bindTexture(c.TEXTURE_2D,j.__webGLTexture)}function g(j,o){var l,p,r;l=0;for(p=o.length;l<p;l++){r=o[l];j.uniforms[r]=c.getUniformLocation(j,r)}}function k(j,o){var l,p,r;l=0;for(p=o.length;l<p;l++){r=o[l];j.attributes[r]=c.getAttribLocation(j,r)}}function i(j,o){var l;if(j=="fragment")l=c.createShader(c.FRAGMENT_SHADER);else if(j=="vertex")l=c.createShader(c.VERTEX_SHADER);c.shaderSource(l,
o);c.compileShader(l);if(!c.getShaderParameter(l,c.COMPILE_STATUS)){alert(c.getShaderInfoLog(l));return null}return l}function h(j){switch(j){case THREE.RepeatWrapping:return c.REPEAT;case THREE.ClampToEdgeWrapping:return c.CLAMP_TO_EDGE;case THREE.MirroredRepeatWrapping:return c.MIRRORED_REPEAT;case THREE.NearestFilter:return c.NEAREST;case THREE.NearestMipMapNearestFilter:return c.NEAREST_MIPMAP_NEAREST;case THREE.NearestMipMapLinearFilter:return c.NEAREST_MIPMAP_LINEAR;case THREE.LinearFilter:return c.LINEAR;
case THREE.LinearMipMapNearestFilter:return c.LINEAR_MIPMAP_NEAREST;case THREE.LinearMipMapLinearFilter:return c.LINEAR_MIPMAP_LINEAR}return 0}var n=document.createElement("canvas"),c,D,u,x=new THREE.Matrix4,A,B=new Float32Array(16),K=new Float32Array(16),v=new Float32Array(16),C=new Float32Array(9),m=new Float32Array(16),O=function(j,o){if(j){var l,p,r,t=pointLights=maxDirLights=maxPointLights=0;l=0;for(p=j.lights.length;l<p;l++){r=j.lights[l];r instanceof THREE.DirectionalLight&&t++;r instanceof
THREE.PointLight&&pointLights++}if(pointLights+t<=o){maxDirLights=t;maxPointLights=pointLights}else{maxDirLights=Math.ceil(o*t/(pointLights+t));maxPointLights=o-maxDirLights}return{directional:maxDirLights,point:maxPointLights}}return{directional:1,point:o-1}}(a.scene,4);fog=a.scene?a.scene.fog:null;antialias=a.antialias!=undefined?a.antialias:true;clearColor=a.clearColor?new THREE.Color(a.clearColor):new THREE.Color(0);clearAlpha=a.clearAlpha?a.clearAlpha:0;this.domElement=n;this.autoClear=true;
(function(j,o,l){try{c=n.getContext("experimental-webgl",{antialias:j})}catch(p){}if(!c){alert("WebGL not supported");throw"cannot create webgl context";}c.clearColor(0,0,0,1);c.clearDepth(1);c.enable(c.DEPTH_TEST);c.depthFunc(c.LEQUAL);c.frontFace(c.CCW);c.cullFace(c.BACK);c.enable(c.CULL_FACE);c.enable(c.BLEND);c.blendFunc(c.ONE,c.ONE_MINUS_SRC_ALPHA);c.clearColor(o.r,o.g,o.b,l)})(antialias,clearColor,clearAlpha);D=u=function(j,o,l){var p=[j?"#define MAX_DIR_LIGHTS "+j:"",o?"#define MAX_POINT_LIGHTS "+
o:"","uniform bool enableLighting;\nuniform bool useRefract;\nuniform int pointLightNumber;\nuniform int directionalLightNumber;\nuniform vec3 ambientLightColor;",j?"uniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];":"",j?"uniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];":"",o?"uniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];":"",o?"uniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];":"","varying vec3 vNormal;\nvarying vec2 vUv;\nvarying vec3 vLightWeighting;",o?"varying vec3 vPointLightVector[ MAX_POINT_LIGHTS ];":
"","varying vec3 vViewPosition;\nvarying vec3 vReflect;\nuniform float mRefractionRatio;\nvoid main(void) {\nvec4 mPosition = objectMatrix * vec4( position, 1.0 );\nvViewPosition = cameraPosition - mPosition.xyz;\nvec3 nWorld = mat3( objectMatrix[0].xyz, objectMatrix[1].xyz, objectMatrix[2].xyz ) * normal;\nvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\nvec3 transformedNormal = normalize( normalMatrix * normal );\nif ( !enableLighting ) {\nvLightWeighting = vec3( 1.0, 1.0, 1.0 );\n} else {\nvLightWeighting = ambientLightColor;",
THREE.WebGLRenderer=function(a){function b(j,o){j.fragment_shader=o.fragment_shader;j.vertex_shader=o.vertex_shader;var l=o.uniforms,p,r,t={};for(p in l){t[p]={};for(r in l[p]){parameter_src=l[p][r];t[p][r]=parameter_src instanceof THREE.Color||parameter_src instanceof THREE.Vector3||parameter_src instanceof THREE.Texture?parameter_src.clone():parameter_src}}j.uniforms=t}function e(j,o,l){var p=c.createProgram();l=["#ifdef GL_ES\nprecision highp float;\n#endif",l?"#define USE_FOG":"",l instanceof
THREE.FogExp2?"#define FOG_EXP2":"","uniform mat4 viewMatrix;\nuniform vec3 cameraPosition;\n"].join("\n");var r=[c.getParameter(c.MAX_VERTEX_TEXTURE_IMAGE_UNITS)>0?"#define VERTEX_TEXTURES":"","uniform mat4 objectMatrix;\nuniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform mat4 viewMatrix;\nuniform mat3 normalMatrix;\nuniform vec3 cameraPosition;\nattribute vec3 position;\nattribute vec3 normal;\nattribute vec2 uv;\n"].join("\n");c.attachShader(p,i("fragment",l+j));c.attachShader(p,
i("vertex",r+o));c.linkProgram(p);c.getProgramParameter(p,c.LINK_STATUS)||alert("Could not initialise shaders\nVALIDATE_STATUS: "+c.getProgramParameter(p,c.VALIDATE_STATUS)+", gl error ["+c.getError()+"]");p.uniforms={};p.attributes={};return p}function d(j,o){if(j.image.length==6){if(!j.image.__webGLTextureCube&&!j.image.__cubeMapInitialized&&j.image.loadCount==6){j.image.__webGLTextureCube=c.createTexture();c.bindTexture(c.TEXTURE_CUBE_MAP,j.image.__webGLTextureCube);c.texParameteri(c.TEXTURE_CUBE_MAP,
c.TEXTURE_WRAP_S,c.CLAMP_TO_EDGE);c.texParameteri(c.TEXTURE_CUBE_MAP,c.TEXTURE_WRAP_T,c.CLAMP_TO_EDGE);c.texParameteri(c.TEXTURE_CUBE_MAP,c.TEXTURE_MAG_FILTER,c.LINEAR);c.texParameteri(c.TEXTURE_CUBE_MAP,c.TEXTURE_MIN_FILTER,c.LINEAR_MIPMAP_LINEAR);for(var l=0;l<6;++l)c.texImage2D(c.TEXTURE_CUBE_MAP_POSITIVE_X+l,0,c.RGBA,c.RGBA,c.UNSIGNED_BYTE,j.image[l]);c.generateMipmap(c.TEXTURE_CUBE_MAP);c.bindTexture(c.TEXTURE_CUBE_MAP,null);j.image.__cubeMapInitialized=true}c.activeTexture(c.TEXTURE0+o);c.bindTexture(c.TEXTURE_CUBE_MAP,
j.image.__webGLTextureCube)}}function f(j,o){if(!j.__webGLTexture&&j.image.loaded){j.__webGLTexture=c.createTexture();c.bindTexture(c.TEXTURE_2D,j.__webGLTexture);c.texImage2D(c.TEXTURE_2D,0,c.RGBA,c.RGBA,c.UNSIGNED_BYTE,j.image);c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_S,h(j.wrap_s));c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_T,h(j.wrap_t));c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MAG_FILTER,h(j.mag_filter));c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MIN_FILTER,h(j.min_filter));c.generateMipmap(c.TEXTURE_2D);
c.bindTexture(c.TEXTURE_2D,null)}c.activeTexture(c.TEXTURE0+o);c.bindTexture(c.TEXTURE_2D,j.__webGLTexture)}function g(j,o){var l,p,r;l=0;for(p=o.length;l<p;l++){r=o[l];j.uniforms[r]=c.getUniformLocation(j,r)}}function k(j,o){var l,p,r;l=0;for(p=o.length;l<p;l++){r=o[l];j.attributes[r]=c.getAttribLocation(j,r)}}function i(j,o){var l;if(j=="fragment")l=c.createShader(c.FRAGMENT_SHADER);else if(j=="vertex")l=c.createShader(c.VERTEX_SHADER);c.shaderSource(l,o);c.compileShader(l);if(!c.getShaderParameter(l,
c.COMPILE_STATUS)){alert(c.getShaderInfoLog(l));return null}return l}function h(j){switch(j){case THREE.RepeatWrapping:return c.REPEAT;case THREE.ClampToEdgeWrapping:return c.CLAMP_TO_EDGE;case THREE.MirroredRepeatWrapping:return c.MIRRORED_REPEAT;case THREE.NearestFilter:return c.NEAREST;case THREE.NearestMipMapNearestFilter:return c.NEAREST_MIPMAP_NEAREST;case THREE.NearestMipMapLinearFilter:return c.NEAREST_MIPMAP_LINEAR;case THREE.LinearFilter:return c.LINEAR;case THREE.LinearMipMapNearestFilter:return c.LINEAR_MIPMAP_NEAREST;
case THREE.LinearMipMapLinearFilter:return c.LINEAR_MIPMAP_LINEAR}return 0}var n=document.createElement("canvas"),c,D,u,x=new THREE.Matrix4,A,B=new Float32Array(16),K=new Float32Array(16),v=new Float32Array(16),C=new Float32Array(9),m=new Float32Array(16),O=function(j,o){if(j){var l,p,r,t=pointLights=maxDirLights=maxPointLights=0;l=0;for(p=j.lights.length;l<p;l++){r=j.lights[l];r instanceof THREE.DirectionalLight&&t++;r instanceof THREE.PointLight&&pointLights++}if(pointLights+t<=o){maxDirLights=
t;maxPointLights=pointLights}else{maxDirLights=Math.ceil(o*t/(pointLights+t));maxPointLights=o-maxDirLights}return{directional:maxDirLights,point:maxPointLights}}return{directional:1,point:o-1}}(a.scene,4);fog=a.scene?a.scene.fog:null;antialias=a.antialias!=undefined?a.antialias:true;clearColor=a.clearColor?new THREE.Color(a.clearColor):new THREE.Color(0);clearAlpha=a.clearAlpha?a.clearAlpha:0;this.domElement=n;this.autoClear=true;(function(j,o,l){try{c=n.getContext("experimental-webgl",{antialias:j})}catch(p){}if(!c){alert("WebGL not supported");
throw"cannot create webgl context";}c.clearColor(0,0,0,1);c.clearDepth(1);c.enable(c.DEPTH_TEST);c.depthFunc(c.LEQUAL);c.frontFace(c.CCW);c.cullFace(c.BACK);c.enable(c.CULL_FACE);c.enable(c.BLEND);c.blendFunc(c.ONE,c.ONE_MINUS_SRC_ALPHA);c.clearColor(o.r,o.g,o.b,l)})(antialias,clearColor,clearAlpha);D=u=function(j,o,l){var p=[j?"#define MAX_DIR_LIGHTS "+j:"",o?"#define MAX_POINT_LIGHTS "+o:"","uniform bool enableLighting;\nuniform bool useRefract;\nuniform int pointLightNumber;\nuniform int directionalLightNumber;\nuniform vec3 ambientLightColor;",
j?"uniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];":"",j?"uniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];":"",o?"uniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];":"",o?"uniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];":"","varying vec3 vNormal;\nvarying vec2 vUv;\nvarying vec3 vLightWeighting;",o?"varying vec3 vPointLightVector[ MAX_POINT_LIGHTS ];":"","varying vec3 vViewPosition;\nvarying vec3 vReflect;\nuniform float mRefractionRatio;\nvoid main(void) {\nvec4 mPosition = objectMatrix * vec4( position, 1.0 );\nvViewPosition = cameraPosition - mPosition.xyz;\nvec3 nWorld = mat3( objectMatrix[0].xyz, objectMatrix[1].xyz, objectMatrix[2].xyz ) * normal;\nvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\nvec3 transformedNormal = normalize( normalMatrix * normal );\nif ( !enableLighting ) {\nvLightWeighting = vec3( 1.0, 1.0, 1.0 );\n} else {\nvLightWeighting = ambientLightColor;",
j?"for( int i = 0; i < MAX_DIR_LIGHTS; i++ ) {":"",j?"vec4 lDirection = viewMatrix * vec4( directionalLightDirection[ i ], 0.0 );":"",j?"float directionalLightWeighting = max( dot( transformedNormal, normalize( lDirection.xyz ) ), 0.0 );":"",j?"vLightWeighting += directionalLightColor[ i ] * directionalLightWeighting;":"",j?"}":"",o?"for( int i = 0; i < MAX_POINT_LIGHTS; i++ ) {":"",o?"vec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );":"",o?"vPointLightVector[ i ] = normalize( lPosition.xyz - mvPosition.xyz );":
"",o?"float pointLightWeighting = max( dot( transformedNormal, vPointLightVector[ i ] ), 0.0 );":"",o?"vLightWeighting += pointLightColor[ i ] * pointLightWeighting;":"",o?"}":"","}\nvNormal = transformedNormal;\nvUv = uv;\nif ( useRefract ) {\nvReflect = refract( normalize(mPosition.xyz - cameraPosition), normalize(nWorld.xyz), mRefractionRatio );\n} else {\nvReflect = reflect( normalize(mPosition.xyz - cameraPosition), normalize(nWorld.xyz) );\n}\ngl_Position = projectionMatrix * mvPosition;\n}"].join("\n"),
r=[j?"#define MAX_DIR_LIGHTS "+j:"",o?"#define MAX_POINT_LIGHTS "+o:"","uniform int material;\nuniform bool enableMap;\nuniform bool enableCubeMap;\nuniform bool mixEnvMap;\nuniform samplerCube tCube;\nuniform float mReflectivity;\nuniform sampler2D tMap;\nuniform vec4 mColor;\nuniform float mOpacity;\nuniform vec4 mAmbient;\nuniform vec4 mSpecular;\nuniform float mShininess;\n#ifdef USE_FOG\nuniform vec3 fogColor;\n#ifdef FOG_EXP2\nuniform float fogDensity;\n#else\nuniform float fogNear;\nuniform float fogFar;\n#endif\n#endif\nuniform int pointLightNumber;\nuniform int directionalLightNumber;",
......
......@@ -61,6 +61,8 @@
<script type="text/javascript" src="../src/materials/mappings/SphericalRefractionMapping.js"></script>
<script type="text/javascript" src="../src/materials/mappings/UVMapping.js"></script>
<script type="text/javascript" src="../src/scenes/Scene.js"></script>
<script type="text/javascript" src="../src/scenes/Fog.js"></script>
<script type="text/javascript" src="../src/scenes/FogExp2.js"></script>
<script type="text/javascript" src="../src/renderers/Projector.js"></script>
<script type="text/javascript" src="../src/renderers/DOMRenderer.js"></script>
<script type="text/javascript" src="../src/renderers/CanvasRenderer.js"></script>
......
......@@ -380,20 +380,19 @@ THREE.WebGLRenderer = function ( parameters ) {
uniforms_dst[ u ] = {};
for ( p in uniforms[ u ] ) {
for ( p in uniforms_src[ u ] ) {
parameter_src = uniforms_src[ u ][ p ];
parameter_dst = uniforms_dst[ u ][ p ];
if ( parameter_src instanceof THREE.Color ||
parameter_src instanceof THREE.Vector3 ||
parameter_src instanceof THREE.Texture ) {
parameter_dst = parameter_src.clone();
uniforms_dst[ u ][ p ] = parameter_src.clone();
} else {
parameter_dst = parameter_src;
uniforms_dst[ u ][ p ] = parameter_src;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册