|
@@ -38,12 +38,12 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
|
|
|
maxLightCount = allocateLights( parameters.scene, 4 ),
|
|
maxLightCount = allocateLights( parameters.scene, 4 ),
|
|
fog = parameters.scene ? parameters.scene.fog : null,
|
|
fog = parameters.scene ? parameters.scene.fog : null,
|
|
-
|
|
|
|
|
|
+
|
|
antialias = parameters.antialias != undefined ? parameters.antialias : true,
|
|
antialias = parameters.antialias != undefined ? parameters.antialias : true,
|
|
-
|
|
|
|
|
|
+
|
|
clearColor = parameters.clearColor ? new THREE.Color( parameters.clearColor ) : new THREE.Color( 0x000000 ),
|
|
clearColor = parameters.clearColor ? new THREE.Color( parameters.clearColor ) : new THREE.Color( 0x000000 ),
|
|
clearAlpha = parameters.clearAlpha ? parameters.clearAlpha : 0;
|
|
clearAlpha = parameters.clearAlpha ? parameters.clearAlpha : 0;
|
|
-
|
|
|
|
|
|
+
|
|
this.domElement = _canvas;
|
|
this.domElement = _canvas;
|
|
this.autoClear = true;
|
|
this.autoClear = true;
|
|
|
|
|
|
@@ -63,12 +63,12 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
};
|
|
};
|
|
|
|
|
|
this.setClearColor = function( hex, alpha ) {
|
|
this.setClearColor = function( hex, alpha ) {
|
|
-
|
|
|
|
|
|
+
|
|
var color = new THREE.Color( hex );
|
|
var color = new THREE.Color( hex );
|
|
_gl.clearColor( color.r, color.g, color.b, alpha );
|
|
_gl.clearColor( color.r, color.g, color.b, alpha );
|
|
-
|
|
|
|
|
|
+
|
|
};
|
|
};
|
|
-
|
|
|
|
|
|
+
|
|
this.clear = function () {
|
|
this.clear = function () {
|
|
|
|
|
|
_gl.clear( _gl.COLOR_BUFFER_BIT | _gl.DEPTH_BUFFER_BIT );
|
|
_gl.clear( _gl.COLOR_BUFFER_BIT | _gl.DEPTH_BUFFER_BIT );
|
|
@@ -122,7 +122,7 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
|
|
|
this.createBuffers = function ( object, g ) {
|
|
this.createBuffers = function ( object, g ) {
|
|
|
|
|
|
- var f, fl, fi, face, vertexNormals, normal, uv, v1, v2, v3, v4, t1, t2, t3, t4, m, ml, i,
|
|
|
|
|
|
+ var f, fl, fi, face, vertexNormals, faceNormal, normal, uv, v1, v2, v3, v4, t1, t2, t3, t4, m, ml, i,
|
|
|
|
|
|
faceArray = [],
|
|
faceArray = [],
|
|
lineArray = [],
|
|
lineArray = [],
|
|
@@ -321,7 +321,7 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
geometryChunk.__webGLLineCount = lineArray.length;
|
|
geometryChunk.__webGLLineCount = lineArray.length;
|
|
|
|
|
|
};
|
|
};
|
|
-
|
|
|
|
|
|
+
|
|
function setMaterialShaders( material, shaders ) {
|
|
function setMaterialShaders( material, shaders ) {
|
|
|
|
|
|
material.fragment_shader = shaders.fragment_shader;
|
|
material.fragment_shader = shaders.fragment_shader;
|
|
@@ -340,30 +340,30 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
|
|
|
material.uniforms.opacity.value = material.opacity;
|
|
material.uniforms.opacity.value = material.opacity;
|
|
material.uniforms.map.texture = material.map;
|
|
material.uniforms.map.texture = material.map;
|
|
-
|
|
|
|
|
|
+
|
|
material.uniforms.env_map.texture = material.env_map;
|
|
material.uniforms.env_map.texture = material.env_map;
|
|
material.uniforms.reflectivity.value = material.reflectivity;
|
|
material.uniforms.reflectivity.value = material.reflectivity;
|
|
material.uniforms.refraction_ratio.value = material.refraction_ratio;
|
|
material.uniforms.refraction_ratio.value = material.refraction_ratio;
|
|
material.uniforms.combine.value = material.combine;
|
|
material.uniforms.combine.value = material.combine;
|
|
material.uniforms.useRefract.value = material.env_map && material.env_map.mapping instanceof THREE.CubeRefractionMapping;
|
|
material.uniforms.useRefract.value = material.env_map && material.env_map.mapping instanceof THREE.CubeRefractionMapping;
|
|
-
|
|
|
|
|
|
+
|
|
if ( fog ) {
|
|
if ( fog ) {
|
|
|
|
|
|
material.uniforms.fogColor.value.setHex( fog.color.hex );
|
|
material.uniforms.fogColor.value.setHex( fog.color.hex );
|
|
-
|
|
|
|
|
|
+
|
|
if ( fog instanceof THREE.Fog ) {
|
|
if ( fog instanceof THREE.Fog ) {
|
|
-
|
|
|
|
|
|
+
|
|
material.uniforms.fogNear.value = fog.near;
|
|
material.uniforms.fogNear.value = fog.near;
|
|
material.uniforms.fogFar.value = fog.far;
|
|
material.uniforms.fogFar.value = fog.far;
|
|
-
|
|
|
|
|
|
+
|
|
} else if ( fog instanceof THREE.FogExp2 ) {
|
|
} else if ( fog instanceof THREE.FogExp2 ) {
|
|
-
|
|
|
|
|
|
+
|
|
material.uniforms.fogDensity.value = fog.density;
|
|
material.uniforms.fogDensity.value = fog.density;
|
|
-
|
|
|
|
|
|
+
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
};
|
|
};
|
|
|
|
|
|
function refreshLights( material, lights ) {
|
|
function refreshLights( material, lights ) {
|
|
@@ -375,8 +375,7 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
material.uniforms.pointLightColor.value = lights.point.colors;
|
|
material.uniforms.pointLightColor.value = lights.point.colors;
|
|
material.uniforms.pointLightPosition.value = lights.point.positions;
|
|
material.uniforms.pointLightPosition.value = lights.point.positions;
|
|
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
|
|
+ };
|
|
|
|
|
|
this.renderBuffer = function ( camera, lights, fog, material, geometryChunk ) {
|
|
this.renderBuffer = function ( camera, lights, fog, material, geometryChunk ) {
|
|
|
|
|
|
@@ -409,9 +408,9 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
setMaterialShaders( material, THREE.ShaderLib[ 'normal' ] );
|
|
setMaterialShaders( material, THREE.ShaderLib[ 'normal' ] );
|
|
|
|
|
|
} else if ( material instanceof THREE.MeshBasicMaterial ) {
|
|
} else if ( material instanceof THREE.MeshBasicMaterial ) {
|
|
-
|
|
|
|
|
|
+
|
|
setMaterialShaders( material, THREE.ShaderLib[ 'basic' ] );
|
|
setMaterialShaders( material, THREE.ShaderLib[ 'basic' ] );
|
|
-
|
|
|
|
|
|
+
|
|
refreshUniforms( material, fog );
|
|
refreshUniforms( material, fog );
|
|
|
|
|
|
} else if ( material instanceof THREE.MeshLambertMaterial ) {
|
|
} else if ( material instanceof THREE.MeshLambertMaterial ) {
|
|
@@ -492,9 +491,9 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
material instanceof THREE.MeshLambertMaterial ) {
|
|
material instanceof THREE.MeshLambertMaterial ) {
|
|
|
|
|
|
refreshUniforms( material, fog );
|
|
refreshUniforms( material, fog );
|
|
-
|
|
|
|
|
|
+
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
if ( material instanceof THREE.MeshShaderMaterial ||
|
|
if ( material instanceof THREE.MeshShaderMaterial ||
|
|
material instanceof THREE.MeshDepthMaterial ||
|
|
material instanceof THREE.MeshDepthMaterial ||
|
|
material instanceof THREE.MeshNormalMaterial ||
|
|
material instanceof THREE.MeshNormalMaterial ||
|
|
@@ -540,16 +539,16 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
if ( fog ) {
|
|
if ( fog ) {
|
|
|
|
|
|
_gl.uniform3f( program.uniforms.fogColor, fog.color.r, fog.color.g, fog.color.b );
|
|
_gl.uniform3f( program.uniforms.fogColor, fog.color.r, fog.color.g, fog.color.b );
|
|
-
|
|
|
|
|
|
+
|
|
if ( fog instanceof THREE.Fog ) {
|
|
if ( fog instanceof THREE.Fog ) {
|
|
-
|
|
|
|
|
|
+
|
|
_gl.uniform1f( program.uniforms.fogNear, fog.near );
|
|
_gl.uniform1f( program.uniforms.fogNear, fog.near );
|
|
_gl.uniform1f( program.uniforms.fogFar, fog.far );
|
|
_gl.uniform1f( program.uniforms.fogFar, fog.far );
|
|
-
|
|
|
|
|
|
+
|
|
} else if ( fog instanceof THREE.FogExp2 ) {
|
|
} else if ( fog instanceof THREE.FogExp2 ) {
|
|
-
|
|
|
|
|
|
+
|
|
_gl.uniform1f( program.uniforms.fogDensity, fog.density );
|
|
_gl.uniform1f( program.uniforms.fogDensity, fog.density );
|
|
-
|
|
|
|
|
|
+
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
}
|
|
@@ -1154,7 +1153,7 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
"}",
|
|
"}",
|
|
|
|
|
|
THREE.Snippets[ "fog_fragment" ],
|
|
THREE.Snippets[ "fog_fragment" ],
|
|
-
|
|
|
|
|
|
+
|
|
"}" ];
|
|
"}" ];
|
|
|
|
|
|
return chunks.join("\n");
|
|
return chunks.join("\n");
|
|
@@ -1234,7 +1233,7 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
|
|
|
parameters.fog ? "#define USE_FOG" : "",
|
|
parameters.fog ? "#define USE_FOG" : "",
|
|
parameters.fog instanceof THREE.FogExp2 ? "#define FOG_EXP2" : "",
|
|
parameters.fog instanceof THREE.FogExp2 ? "#define FOG_EXP2" : "",
|
|
-
|
|
|
|
|
|
+
|
|
parameters.map ? "#define USE_MAP" : "",
|
|
parameters.map ? "#define USE_MAP" : "",
|
|
parameters.env_map ? "#define USE_ENVMAP" : "",
|
|
parameters.env_map ? "#define USE_ENVMAP" : "",
|
|
|
|
|
|
@@ -1548,7 +1547,7 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
|
|
|
function bufferNeedsSmoothNormals( geometryChunk, object ) {
|
|
function bufferNeedsSmoothNormals( geometryChunk, object ) {
|
|
|
|
|
|
- var m, ml, i, l, needsSmoothNormals = false;
|
|
|
|
|
|
+ var m, ml, i, l, meshMaterial, needsSmoothNormals = false;
|
|
|
|
|
|
for ( m = 0, ml = object.materials.length; m < ml; m++ ) {
|
|
for ( m = 0, ml = object.materials.length; m < ml; m++ ) {
|
|
|
|
|
|
@@ -1590,7 +1589,8 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
|
|
|
if ( scene ) {
|
|
if ( scene ) {
|
|
|
|
|
|
- var l, ll, light, dirLights = pointLights = maxDirLights = maxPointLights = 0;
|
|
|
|
|
|
+ var l, ll, light, dirLights, pointLights, maxDirLights, maxPointLights;
|
|
|
|
+ dirLights = pointLights = maxDirLights = maxPointLights = 0;
|
|
|
|
|
|
for ( l = 0, ll = scene.lights.length; l < ll; l++ ) {
|
|
for ( l = 0, ll = scene.lights.length; l < ll; l++ ) {
|
|
|
|
|
|
@@ -1660,24 +1660,24 @@ THREE.Snippets = {
|
|
fog_pars_fragment: [
|
|
fog_pars_fragment: [
|
|
|
|
|
|
"#ifdef USE_FOG",
|
|
"#ifdef USE_FOG",
|
|
-
|
|
|
|
|
|
+
|
|
"uniform vec3 fogColor;",
|
|
"uniform vec3 fogColor;",
|
|
-
|
|
|
|
|
|
+
|
|
"#ifdef FOG_EXP2",
|
|
"#ifdef FOG_EXP2",
|
|
"uniform float fogDensity;",
|
|
"uniform float fogDensity;",
|
|
"#else",
|
|
"#else",
|
|
"uniform float fogNear;",
|
|
"uniform float fogNear;",
|
|
"uniform float fogFar;",
|
|
"uniform float fogFar;",
|
|
"#endif",
|
|
"#endif",
|
|
-
|
|
|
|
|
|
+
|
|
"#endif"
|
|
"#endif"
|
|
-
|
|
|
|
|
|
+
|
|
].join("\n"),
|
|
].join("\n"),
|
|
|
|
|
|
fog_fragment: [
|
|
fog_fragment: [
|
|
|
|
|
|
"#ifdef USE_FOG",
|
|
"#ifdef USE_FOG",
|
|
-
|
|
|
|
|
|
+
|
|
"float depth = gl_FragCoord.z / gl_FragCoord.w;",
|
|
"float depth = gl_FragCoord.z / gl_FragCoord.w;",
|
|
|
|
|
|
"#ifdef FOG_EXP2",
|
|
"#ifdef FOG_EXP2",
|
|
@@ -1687,7 +1687,7 @@ THREE.Snippets = {
|
|
"#else",
|
|
"#else",
|
|
"float fogFactor = smoothstep( fogNear, fogFar, depth );",
|
|
"float fogFactor = smoothstep( fogNear, fogFar, depth );",
|
|
"#endif",
|
|
"#endif",
|
|
-
|
|
|
|
|
|
+
|
|
"gl_FragColor = mix( gl_FragColor, vec4( fogColor, 1.0 ), fogFactor );",
|
|
"gl_FragColor = mix( gl_FragColor, vec4( fogColor, 1.0 ), fogFactor );",
|
|
|
|
|
|
"#endif"
|
|
"#endif"
|
|
@@ -1868,7 +1868,7 @@ THREE.Snippets = {
|
|
"}"
|
|
"}"
|
|
|
|
|
|
].join("\n")
|
|
].join("\n")
|
|
-
|
|
|
|
|
|
+
|
|
};
|
|
};
|
|
|
|
|
|
THREE.ShaderLib = {
|
|
THREE.ShaderLib = {
|
|
@@ -1937,9 +1937,9 @@ THREE.ShaderLib = {
|
|
].join("\n")
|
|
].join("\n")
|
|
|
|
|
|
},
|
|
},
|
|
-
|
|
|
|
|
|
+
|
|
'basic': {
|
|
'basic': {
|
|
-
|
|
|
|
|
|
+
|
|
uniforms: { "color" : { type: "c", value: new THREE.Color( 0xeeeeee ) },
|
|
uniforms: { "color" : { type: "c", value: new THREE.Color( 0xeeeeee ) },
|
|
"opacity" : { type: "f", value: 1 },
|
|
"opacity" : { type: "f", value: 1 },
|
|
"map" : { type: "t", value: 0, texture: null },
|
|
"map" : { type: "t", value: 0, texture: null },
|
|
@@ -1953,9 +1953,9 @@ THREE.ShaderLib = {
|
|
"fogFar" : { type: "f", value: 2000 },
|
|
"fogFar" : { type: "f", value: 2000 },
|
|
"fogColor" : { type: "c", value: new THREE.Color( 0xffffff ) }
|
|
"fogColor" : { type: "c", value: new THREE.Color( 0xffffff ) }
|
|
},
|
|
},
|
|
-
|
|
|
|
|
|
+
|
|
fragment_shader: [
|
|
fragment_shader: [
|
|
-
|
|
|
|
|
|
+
|
|
"uniform vec3 color;",
|
|
"uniform vec3 color;",
|
|
"uniform float opacity;",
|
|
"uniform float opacity;",
|
|
|
|
|
|
@@ -1964,7 +1964,7 @@ THREE.ShaderLib = {
|
|
THREE.Snippets[ "fog_pars_fragment" ],
|
|
THREE.Snippets[ "fog_pars_fragment" ],
|
|
|
|
|
|
"void main() {",
|
|
"void main() {",
|
|
-
|
|
|
|
|
|
+
|
|
"vec4 mColor = vec4( color, opacity );",
|
|
"vec4 mColor = vec4( color, opacity );",
|
|
"vec4 mapColor = vec4( 1.0, 1.0, 1.0, 1.0 );",
|
|
"vec4 mapColor = vec4( 1.0, 1.0, 1.0, 1.0 );",
|
|
"vec4 cubeColor = vec4( 1.0, 1.0, 1.0, 1.0 );",
|
|
"vec4 cubeColor = vec4( 1.0, 1.0, 1.0, 1.0 );",
|
|
@@ -2048,11 +2048,11 @@ THREE.ShaderLib = {
|
|
|
|
|
|
THREE.Snippets[ "envmap_fragment" ],
|
|
THREE.Snippets[ "envmap_fragment" ],
|
|
THREE.Snippets[ "fog_fragment" ],
|
|
THREE.Snippets[ "fog_fragment" ],
|
|
-
|
|
|
|
|
|
+
|
|
"}"
|
|
"}"
|
|
|
|
|
|
].join("\n"),
|
|
].join("\n"),
|
|
-
|
|
|
|
|
|
+
|
|
vertex_shader: [
|
|
vertex_shader: [
|
|
|
|
|
|
"varying vec3 vLightWeighting;",
|
|
"varying vec3 vLightWeighting;",
|