提交 9cd7308d 编写于 作者: A alteredq

Attempt to merge with mrdoob's branch.

This version is inconsistent. Will follow with another merge.
......@@ -145,16 +145,16 @@ b.STATIC_DRAW);m.__webGLNormalBuffer=b.createBuffer();b.bindBuffer(b.ARRAY_BUFFE
b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,m.__webGLLineBuffer);b.bufferData(b.ELEMENT_ARRAY_BUFFER,new Uint16Array(i),b.STATIC_DRAW);m.__webGLFaceCount=v.length;m.__webGLLineCount=i.length}};this.renderBuffer=function(e,g){var n,h,l,q,p,s,A,C,B,m;if(e instanceof THREE.MeshPhongMaterial||e instanceof THREE.MeshLambertMaterial||e instanceof THREE.MeshBasicMaterial){n=e.color;h=e.opacity;q=e.wireframe;p=e.wireframe_linewidth;A=e.map;C=e.env_map;s=e.combine==THREE.Mix;l=e.reflectivity;m=e.env_map&&e.env_map.mapping==
THREE.RefractionMap;B=e.refraction_ratio;b.uniform4f(d.mColor,n.r*h,n.g*h,n.b*h,h);b.uniform1i(d.mixEnvMap,s);b.uniform1f(d.mReflectivity,l);b.uniform1i(d.useRefract,m);b.uniform1f(d.mRefractionRatio,B)}if(e instanceof THREE.MeshNormalMaterial){h=e.opacity;b.uniform1f(d.mOpacity,h);b.uniform1i(d.material,4)}else if(e instanceof THREE.MeshDepthMaterial){h=e.opacity;q=e.wireframe;p=e.wireframe_linewidth;b.uniform1f(d.mOpacity,h);b.uniform1f(d.m2Near,e.__2near);b.uniform1f(d.mFarPlusNear,e.__farPlusNear);
b.uniform1f(d.mFarMinusNear,e.__farMinusNear);b.uniform1i(d.material,3)}else if(e instanceof THREE.MeshPhongMaterial){n=e.ambient;l=e.specular;s=e.shininess;b.uniform4f(d.mAmbient,n.r,n.g,n.b,h);b.uniform4f(d.mSpecular,l.r,l.g,l.b,h);b.uniform1f(d.mShininess,s);b.uniform1i(d.material,2)}else if(e instanceof THREE.MeshLambertMaterial)b.uniform1i(d.material,1);else if(e instanceof THREE.MeshBasicMaterial)b.uniform1i(d.material,0);else if(e instanceof THREE.MeshCubeMaterial){b.uniform1i(d.material,5);
C=e.env_map}if(A){if(!e.__webGLTexture&&e.map.image.loaded){e.__webGLTexture=b.createTexture();b.bindTexture(b.TEXTURE_2D,e.__webGLTexture);b.texImage2D(b.TEXTURE_2D,0,b.RGBA,b.RGBA,b.UNSIGNED_BYTE,e.map.image);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MAG_FILTER,b.LINEAR);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MIN_FILTER,b.LINEAR_MIPMAP_LINEAR);b.generateMipmap(b.TEXTURE_2D);b.bindTexture(b.TEXTURE_2D,null)}b.activeTexture(b.TEXTURE0);b.bindTexture(b.TEXTURE_2D,e.__webGLTexture);b.uniform1i(d.tMap,
0);b.uniform1i(d.enableMap,1)}else b.uniform1i(d.enableMap,0);if(C){if(e.env_map&&e.env_map instanceof THREE.TextureCube&&e.env_map.image.length==6){if(!e.env_map.image.__webGLTextureCube&&!e.env_map.image.__cubeMapInitialized&&e.env_map.image.loadCount==6){e.env_map.image.__webGLTextureCube=b.createTexture();b.bindTexture(b.TEXTURE_CUBE_MAP,e.env_map.image.__webGLTextureCube);b.texParameteri(b.TEXTURE_CUBE_MAP,b.TEXTURE_WRAP_S,b.CLAMP_TO_EDGE);b.texParameteri(b.TEXTURE_CUBE_MAP,b.TEXTURE_WRAP_T,
b.CLAMP_TO_EDGE);b.texParameteri(b.TEXTURE_CUBE_MAP,b.TEXTURE_MAG_FILTER,b.LINEAR);b.texParameteri(b.TEXTURE_CUBE_MAP,b.TEXTURE_MIN_FILTER,b.LINEAR_MIPMAP_LINEAR);b.texImage2D(b.TEXTURE_CUBE_MAP_POSITIVE_X,0,b.RGBA,b.RGBA,b.UNSIGNED_BYTE,e.env_map.image[0]);b.texImage2D(b.TEXTURE_CUBE_MAP_NEGATIVE_X,0,b.RGBA,b.RGBA,b.UNSIGNED_BYTE,e.env_map.image[1]);b.texImage2D(b.TEXTURE_CUBE_MAP_POSITIVE_Y,0,b.RGBA,b.RGBA,b.UNSIGNED_BYTE,e.env_map.image[2]);b.texImage2D(b.TEXTURE_CUBE_MAP_NEGATIVE_Y,0,b.RGBA,b.RGBA,
b.UNSIGNED_BYTE,e.env_map.image[3]);b.texImage2D(b.TEXTURE_CUBE_MAP_POSITIVE_Z,0,b.RGBA,b.RGBA,b.UNSIGNED_BYTE,e.env_map.image[4]);b.texImage2D(b.TEXTURE_CUBE_MAP_NEGATIVE_Z,0,b.RGBA,b.RGBA,b.UNSIGNED_BYTE,e.env_map.image[5]);b.generateMipmap(b.TEXTURE_CUBE_MAP);b.bindTexture(b.TEXTURE_CUBE_MAP,null);e.env_map.image.__cubeMapInitialized=true}b.activeTexture(b.TEXTURE1);b.bindTexture(b.TEXTURE_CUBE_MAP,e.env_map.image.__webGLTextureCube);b.uniform1i(d.tCube,1)}b.uniform1i(d.enableCubeMap,1)}else b.uniform1i(d.enableCubeMap,
0);b.bindBuffer(b.ARRAY_BUFFER,g.__webGLVertexBuffer);b.vertexAttribPointer(d.position,3,b.FLOAT,false,0,0);b.bindBuffer(b.ARRAY_BUFFER,g.__webGLNormalBuffer);b.vertexAttribPointer(d.normal,3,b.FLOAT,false,0,0);if(A){b.bindBuffer(b.ARRAY_BUFFER,g.__webGLUVBuffer);b.enableVertexAttribArray(d.uv);b.vertexAttribPointer(d.uv,2,b.FLOAT,false,0,0)}else b.disableVertexAttribArray(d.uv);if(q){b.lineWidth(p);b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,g.__webGLLineBuffer);b.drawElements(b.LINES,g.__webGLLineCount,
b.UNSIGNED_SHORT,0)}else{b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,g.__webGLFaceBuffer);b.drawElements(b.TRIANGLES,g.__webGLFaceCount,b.UNSIGNED_SHORT,0)}};this.renderPass=function(e,g,n){var h,l,q,p,s;q=0;for(p=e.material.length;q<p;q++){h=e.material[q];if(h instanceof THREE.MeshFaceMaterial){h=0;for(l=g.material.length;h<l;h++)if((s=g.material[h])&&s.blending==n){this.setBlending(s.blending);this.renderBuffer(s,g)}}else if((s=h)&&s.blending==n){this.setBlending(s.blending);this.renderBuffer(s,g)}}};this.render=
function(e,g){var n,h;this.initWebGLObjects(e);this.autoClear&&this.clear();g.autoUpdateMatrix&&g.updateMatrix();b.uniform3f(d.cameraPosition,g.position.x,g.position.y,g.position.z);this.setupLights(e);n=0;for(h=e.__webGLObjects.length;n<h;n++){webGLObject=e.__webGLObjects[n];this.setupMatrices(webGLObject.__object,g);this.renderPass(webGLObject.__object,webGLObject,THREE.NormalBlending)}n=0;for(h=e.__webGLObjects.length;n<h;n++){webGLObject=e.__webGLObjects[n];this.setupMatrices(webGLObject.__object,
g);this.renderPass(webGLObject.__object,webGLObject,THREE.AdditiveBlending);this.renderPass(webGLObject.__object,webGLObject,THREE.SubtractiveBlending)}};this.initWebGLObjects=function(e){var g,n,h,l,q;if(!e.__webGLObjects)e.__webGLObjects=[];g=0;for(n=e.objects.length;g<n;g++){h=e.objects[g];if(h instanceof THREE.Mesh)for(l in h.materialFaceGroup){q=h.materialFaceGroup[l];if(!q.__webGLVertexBuffer){this.createBuffers(h,l);q.__object=h;e.__webGLObjects.push(q)}}}};this.setupMatrices=function(e,g){e.autoUpdateMatrix&&
e.updateMatrix();j.multiply(g.matrix,e.matrix);d.viewMatrixArray=new Float32Array(g.matrix.flatten());d.modelViewMatrixArray=new Float32Array(j.flatten());d.projectionMatrixArray=new Float32Array(g.projectionMatrix.flatten());o=THREE.Matrix4.makeInvert3x3(j).transpose();d.normalMatrixArray=new Float32Array(o.m);b.uniformMatrix4fv(d.viewMatrix,false,d.viewMatrixArray);b.uniformMatrix4fv(d.modelViewMatrix,false,d.modelViewMatrixArray);b.uniformMatrix4fv(d.projectionMatrix,false,d.projectionMatrixArray);
b.uniformMatrix3fv(d.normalMatrix,false,d.normalMatrixArray);b.uniformMatrix4fv(d.objMatrix,false,new Float32Array(e.matrix.flatten()))};this.setBlending=function(e){switch(e){case THREE.AdditiveBlending:b.blendEquation(b.FUNC_ADD);b.blendFunc(b.ONE,b.ONE);break;case THREE.SubtractiveBlending:b.blendFunc(b.DST_COLOR,b.ZERO);break;default:b.blendEquation(b.FUNC_ADD);b.blendFunc(b.ONE,b.ONE_MINUS_SRC_ALPHA)}};this.setFaceCulling=function(e,g){if(e){!g||g=="ccw"?b.frontFace(b.CCW):b.frontFace(b.CW);
if(e=="back")b.cullFace(b.BACK);else e=="front"?b.cullFace(b.FRONT):b.cullFace(b.FRONT_AND_BACK);b.enable(b.CULL_FACE)}else b.disable(b.CULL_FACE)}};THREE.RenderableFace3=function(){this.v1=new THREE.Vertex;this.v2=new THREE.Vertex;this.v3=new THREE.Vertex;this.centroidWorld=new THREE.Vector3;this.centroidScreen=new THREE.Vector3;this.normalWorld=new THREE.Vector3;this.material=this.color=this.z=null};
C=e.env_map}if(A){if(!e.__webGLTexture&&e.map.image.loaded){e.__webGLTexture=b.createTexture();b.bindTexture(b.TEXTURE_2D,e.__webGLTexture);b.texImage2D(b.TEXTURE_2D,0,b.RGBA,b.RGBA,b.UNSIGNED_BYTE,e.map.image);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_S,b.CLAMP_TO_EDGE);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_T,b.CLAMP_TO_EDGE);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MAG_FILTER,b.LINEAR);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MIN_FILTER,b.LINEAR_MIPMAP_LINEAR);b.generateMipmap(b.TEXTURE_2D);
b.bindTexture(b.TEXTURE_2D,null)}b.activeTexture(b.TEXTURE0);b.bindTexture(b.TEXTURE_2D,e.__webGLTexture);b.uniform1i(d.tMap,0);b.uniform1i(d.enableMap,1)}else b.uniform1i(d.enableMap,0);if(C){if(e.env_map&&e.env_map instanceof THREE.TextureCube&&e.env_map.image.length==6){if(!e.env_map.image.__webGLTextureCube&&!e.env_map.image.__cubeMapInitialized&&e.env_map.image.loadCount==6){e.env_map.image.__webGLTextureCube=b.createTexture();b.bindTexture(b.TEXTURE_CUBE_MAP,e.env_map.image.__webGLTextureCube);
b.texParameteri(b.TEXTURE_CUBE_MAP,b.TEXTURE_WRAP_S,b.CLAMP_TO_EDGE);b.texParameteri(b.TEXTURE_CUBE_MAP,b.TEXTURE_WRAP_T,b.CLAMP_TO_EDGE);b.texParameteri(b.TEXTURE_CUBE_MAP,b.TEXTURE_MAG_FILTER,b.LINEAR);b.texParameteri(b.TEXTURE_CUBE_MAP,b.TEXTURE_MIN_FILTER,b.LINEAR_MIPMAP_LINEAR);b.texImage2D(b.TEXTURE_CUBE_MAP_POSITIVE_X,0,b.RGBA,b.RGBA,b.UNSIGNED_BYTE,e.env_map.image[0]);b.texImage2D(b.TEXTURE_CUBE_MAP_NEGATIVE_X,0,b.RGBA,b.RGBA,b.UNSIGNED_BYTE,e.env_map.image[1]);b.texImage2D(b.TEXTURE_CUBE_MAP_POSITIVE_Y,
0,b.RGBA,b.RGBA,b.UNSIGNED_BYTE,e.env_map.image[2]);b.texImage2D(b.TEXTURE_CUBE_MAP_NEGATIVE_Y,0,b.RGBA,b.RGBA,b.UNSIGNED_BYTE,e.env_map.image[3]);b.texImage2D(b.TEXTURE_CUBE_MAP_POSITIVE_Z,0,b.RGBA,b.RGBA,b.UNSIGNED_BYTE,e.env_map.image[4]);b.texImage2D(b.TEXTURE_CUBE_MAP_NEGATIVE_Z,0,b.RGBA,b.RGBA,b.UNSIGNED_BYTE,e.env_map.image[5]);b.generateMipmap(b.TEXTURE_CUBE_MAP);b.bindTexture(b.TEXTURE_CUBE_MAP,null);e.env_map.image.__cubeMapInitialized=true}b.activeTexture(b.TEXTURE1);b.bindTexture(b.TEXTURE_CUBE_MAP,
e.env_map.image.__webGLTextureCube);b.uniform1i(d.tCube,1)}b.uniform1i(d.enableCubeMap,1)}else b.uniform1i(d.enableCubeMap,0);b.bindBuffer(b.ARRAY_BUFFER,g.__webGLVertexBuffer);b.vertexAttribPointer(d.position,3,b.FLOAT,false,0,0);b.bindBuffer(b.ARRAY_BUFFER,g.__webGLNormalBuffer);b.vertexAttribPointer(d.normal,3,b.FLOAT,false,0,0);if(A){b.bindBuffer(b.ARRAY_BUFFER,g.__webGLUVBuffer);b.enableVertexAttribArray(d.uv);b.vertexAttribPointer(d.uv,2,b.FLOAT,false,0,0)}else b.disableVertexAttribArray(d.uv);
if(q){b.lineWidth(p);b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,g.__webGLLineBuffer);b.drawElements(b.LINES,g.__webGLLineCount,b.UNSIGNED_SHORT,0)}else{b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,g.__webGLFaceBuffer);b.drawElements(b.TRIANGLES,g.__webGLFaceCount,b.UNSIGNED_SHORT,0)}};this.renderPass=function(e,g,n){var h,l,q,p,s;q=0;for(p=e.material.length;q<p;q++){h=e.material[q];if(h instanceof THREE.MeshFaceMaterial){h=0;for(l=g.material.length;h<l;h++)if((s=g.material[h])&&s.blending==n){this.setBlending(s.blending);
this.renderBuffer(s,g)}}else if((s=h)&&s.blending==n){this.setBlending(s.blending);this.renderBuffer(s,g)}}};this.render=function(e,g){var n,h;this.initWebGLObjects(e);this.autoClear&&this.clear();g.autoUpdateMatrix&&g.updateMatrix();b.uniform3f(d.cameraPosition,g.position.x,g.position.y,g.position.z);this.setupLights(e);n=0;for(h=e.__webGLObjects.length;n<h;n++){webGLObject=e.__webGLObjects[n];this.setupMatrices(webGLObject.__object,g);this.renderPass(webGLObject.__object,webGLObject,THREE.NormalBlending)}n=
0;for(h=e.__webGLObjects.length;n<h;n++){webGLObject=e.__webGLObjects[n];this.setupMatrices(webGLObject.__object,g);this.renderPass(webGLObject.__object,webGLObject,THREE.AdditiveBlending);this.renderPass(webGLObject.__object,webGLObject,THREE.SubtractiveBlending)}};this.initWebGLObjects=function(e){var g,n,h,l,q;if(!e.__webGLObjects)e.__webGLObjects=[];g=0;for(n=e.objects.length;g<n;g++){h=e.objects[g];if(h instanceof THREE.Mesh)for(l in h.materialFaceGroup){q=h.materialFaceGroup[l];if(!q.__webGLVertexBuffer){this.createBuffers(h,
l);q.__object=h;e.__webGLObjects.push(q)}}}};this.setupMatrices=function(e,g){e.autoUpdateMatrix&&e.updateMatrix();j.multiply(g.matrix,e.matrix);d.viewMatrixArray=new Float32Array(g.matrix.flatten());d.modelViewMatrixArray=new Float32Array(j.flatten());d.projectionMatrixArray=new Float32Array(g.projectionMatrix.flatten());o=THREE.Matrix4.makeInvert3x3(j).transpose();d.normalMatrixArray=new Float32Array(o.m);b.uniformMatrix4fv(d.viewMatrix,false,d.viewMatrixArray);b.uniformMatrix4fv(d.modelViewMatrix,
false,d.modelViewMatrixArray);b.uniformMatrix4fv(d.projectionMatrix,false,d.projectionMatrixArray);b.uniformMatrix3fv(d.normalMatrix,false,d.normalMatrixArray);b.uniformMatrix4fv(d.objMatrix,false,new Float32Array(e.matrix.flatten()))};this.setBlending=function(e){switch(e){case THREE.AdditiveBlending:b.blendEquation(b.FUNC_ADD);b.blendFunc(b.ONE,b.ONE);break;case THREE.SubtractiveBlending:b.blendFunc(b.DST_COLOR,b.ZERO);break;default:b.blendEquation(b.FUNC_ADD);b.blendFunc(b.ONE,b.ONE_MINUS_SRC_ALPHA)}};
this.setFaceCulling=function(e,g){if(e){!g||g=="ccw"?b.frontFace(b.CCW):b.frontFace(b.CW);if(e=="back")b.cullFace(b.BACK);else e=="front"?b.cullFace(b.FRONT):b.cullFace(b.FRONT_AND_BACK);b.enable(b.CULL_FACE)}else b.disable(b.CULL_FACE)}};THREE.RenderableFace3=function(){this.v1=new THREE.Vertex;this.v2=new THREE.Vertex;this.v3=new THREE.Vertex;this.centroidWorld=new THREE.Vector3;this.centroidScreen=new THREE.Vector3;this.normalWorld=new THREE.Vector3;this.material=this.color=this.z=null};
THREE.RenderableFace4=function(){this.v1=new THREE.Vertex;this.v2=new THREE.Vertex;this.v3=new THREE.Vertex;this.v4=new THREE.Vertex;this.centroidWorld=new THREE.Vector3;this.centroidScreen=new THREE.Vector3;this.normalWorld=new THREE.Vector3;this.material=this.color=this.z=null};THREE.RenderableParticle=function(){this.rotation=this.z=this.y=this.x=null;this.scale=new THREE.Vector2;this.material=this.color=null};
THREE.RenderableLine=function(){this.v1=new THREE.Vertex;this.v2=new THREE.Vertex;this.material=this.color=this.z=null};
......@@ -145,16 +145,16 @@ b.STATIC_DRAW);m.__webGLNormalBuffer=b.createBuffer();b.bindBuffer(b.ARRAY_BUFFE
b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,m.__webGLLineBuffer);b.bufferData(b.ELEMENT_ARRAY_BUFFER,new Uint16Array(h),b.STATIC_DRAW);m.__webGLFaceCount=w.length;m.__webGLLineCount=h.length}};this.renderBuffer=function(e,g){var n,i,l,q,p,s,A,C,B,m;if(e instanceof THREE.MeshPhongMaterial||e instanceof THREE.MeshLambertMaterial||e instanceof THREE.MeshBasicMaterial){n=e.color;i=e.opacity;q=e.wireframe;p=e.wireframe_linewidth;A=e.map;C=e.env_map;s=e.combine==THREE.Mix;l=e.reflectivity;m=e.env_map&&e.env_map.mapping==
THREE.RefractionMap;B=e.refraction_ratio;b.uniform4f(d.mColor,n.r*i,n.g*i,n.b*i,i);b.uniform1i(d.mixEnvMap,s);b.uniform1f(d.mReflectivity,l);b.uniform1i(d.useRefract,m);b.uniform1f(d.mRefractionRatio,B)}if(e instanceof THREE.MeshNormalMaterial){i=e.opacity;b.uniform1f(d.mOpacity,i);b.uniform1i(d.material,4)}else if(e instanceof THREE.MeshDepthMaterial){i=e.opacity;q=e.wireframe;p=e.wireframe_linewidth;b.uniform1f(d.mOpacity,i);b.uniform1f(d.m2Near,e.__2near);b.uniform1f(d.mFarPlusNear,e.__farPlusNear);
b.uniform1f(d.mFarMinusNear,e.__farMinusNear);b.uniform1i(d.material,3)}else if(e instanceof THREE.MeshPhongMaterial){n=e.ambient;l=e.specular;s=e.shininess;b.uniform4f(d.mAmbient,n.r,n.g,n.b,i);b.uniform4f(d.mSpecular,l.r,l.g,l.b,i);b.uniform1f(d.mShininess,s);b.uniform1i(d.material,2)}else if(e instanceof THREE.MeshLambertMaterial)b.uniform1i(d.material,1);else if(e instanceof THREE.MeshBasicMaterial)b.uniform1i(d.material,0);else if(e instanceof THREE.MeshCubeMaterial){b.uniform1i(d.material,5);
C=e.env_map}if(A){if(!e.__webGLTexture&&e.map.image.loaded){e.__webGLTexture=b.createTexture();b.bindTexture(b.TEXTURE_2D,e.__webGLTexture);b.texImage2D(b.TEXTURE_2D,0,b.RGBA,b.RGBA,b.UNSIGNED_BYTE,e.map.image);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MAG_FILTER,b.LINEAR);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MIN_FILTER,b.LINEAR_MIPMAP_LINEAR);b.generateMipmap(b.TEXTURE_2D);b.bindTexture(b.TEXTURE_2D,null)}b.activeTexture(b.TEXTURE0);b.bindTexture(b.TEXTURE_2D,e.__webGLTexture);b.uniform1i(d.tMap,
0);b.uniform1i(d.enableMap,1)}else b.uniform1i(d.enableMap,0);if(C){if(e.env_map&&e.env_map instanceof THREE.TextureCube&&e.env_map.image.length==6){if(!e.env_map.image.__webGLTextureCube&&!e.env_map.image.__cubeMapInitialized&&e.env_map.image.loadCount==6){e.env_map.image.__webGLTextureCube=b.createTexture();b.bindTexture(b.TEXTURE_CUBE_MAP,e.env_map.image.__webGLTextureCube);b.texParameteri(b.TEXTURE_CUBE_MAP,b.TEXTURE_WRAP_S,b.CLAMP_TO_EDGE);b.texParameteri(b.TEXTURE_CUBE_MAP,b.TEXTURE_WRAP_T,
b.CLAMP_TO_EDGE);b.texParameteri(b.TEXTURE_CUBE_MAP,b.TEXTURE_MAG_FILTER,b.LINEAR);b.texParameteri(b.TEXTURE_CUBE_MAP,b.TEXTURE_MIN_FILTER,b.LINEAR_MIPMAP_LINEAR);b.texImage2D(b.TEXTURE_CUBE_MAP_POSITIVE_X,0,b.RGBA,b.RGBA,b.UNSIGNED_BYTE,e.env_map.image[0]);b.texImage2D(b.TEXTURE_CUBE_MAP_NEGATIVE_X,0,b.RGBA,b.RGBA,b.UNSIGNED_BYTE,e.env_map.image[1]);b.texImage2D(b.TEXTURE_CUBE_MAP_POSITIVE_Y,0,b.RGBA,b.RGBA,b.UNSIGNED_BYTE,e.env_map.image[2]);b.texImage2D(b.TEXTURE_CUBE_MAP_NEGATIVE_Y,0,b.RGBA,b.RGBA,
b.UNSIGNED_BYTE,e.env_map.image[3]);b.texImage2D(b.TEXTURE_CUBE_MAP_POSITIVE_Z,0,b.RGBA,b.RGBA,b.UNSIGNED_BYTE,e.env_map.image[4]);b.texImage2D(b.TEXTURE_CUBE_MAP_NEGATIVE_Z,0,b.RGBA,b.RGBA,b.UNSIGNED_BYTE,e.env_map.image[5]);b.generateMipmap(b.TEXTURE_CUBE_MAP);b.bindTexture(b.TEXTURE_CUBE_MAP,null);e.env_map.image.__cubeMapInitialized=true}b.activeTexture(b.TEXTURE1);b.bindTexture(b.TEXTURE_CUBE_MAP,e.env_map.image.__webGLTextureCube);b.uniform1i(d.tCube,1)}b.uniform1i(d.enableCubeMap,1)}else b.uniform1i(d.enableCubeMap,
0);b.bindBuffer(b.ARRAY_BUFFER,g.__webGLVertexBuffer);b.vertexAttribPointer(d.position,3,b.FLOAT,false,0,0);b.bindBuffer(b.ARRAY_BUFFER,g.__webGLNormalBuffer);b.vertexAttribPointer(d.normal,3,b.FLOAT,false,0,0);if(A){b.bindBuffer(b.ARRAY_BUFFER,g.__webGLUVBuffer);b.enableVertexAttribArray(d.uv);b.vertexAttribPointer(d.uv,2,b.FLOAT,false,0,0)}else b.disableVertexAttribArray(d.uv);if(q){b.lineWidth(p);b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,g.__webGLLineBuffer);b.drawElements(b.LINES,g.__webGLLineCount,
b.UNSIGNED_SHORT,0)}else{b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,g.__webGLFaceBuffer);b.drawElements(b.TRIANGLES,g.__webGLFaceCount,b.UNSIGNED_SHORT,0)}};this.renderPass=function(e,g,n){var i,l,q,p,s;q=0;for(p=e.material.length;q<p;q++){i=e.material[q];if(i instanceof THREE.MeshFaceMaterial){i=0;for(l=g.material.length;i<l;i++)if((s=g.material[i])&&s.blending==n){this.setBlending(s.blending);this.renderBuffer(s,g)}}else if((s=i)&&s.blending==n){this.setBlending(s.blending);this.renderBuffer(s,g)}}};this.render=
function(e,g){var n,i;this.initWebGLObjects(e);this.autoClear&&this.clear();g.autoUpdateMatrix&&g.updateMatrix();b.uniform3f(d.cameraPosition,g.position.x,g.position.y,g.position.z);this.setupLights(e);n=0;for(i=e.__webGLObjects.length;n<i;n++){webGLObject=e.__webGLObjects[n];this.setupMatrices(webGLObject.__object,g);this.renderPass(webGLObject.__object,webGLObject,THREE.NormalBlending)}n=0;for(i=e.__webGLObjects.length;n<i;n++){webGLObject=e.__webGLObjects[n];this.setupMatrices(webGLObject.__object,
g);this.renderPass(webGLObject.__object,webGLObject,THREE.AdditiveBlending);this.renderPass(webGLObject.__object,webGLObject,THREE.SubtractiveBlending)}};this.initWebGLObjects=function(e){var g,n,i,l,q;if(!e.__webGLObjects)e.__webGLObjects=[];g=0;for(n=e.objects.length;g<n;g++){i=e.objects[g];if(i instanceof THREE.Mesh)for(l in i.materialFaceGroup){q=i.materialFaceGroup[l];if(!q.__webGLVertexBuffer){this.createBuffers(i,l);q.__object=i;e.__webGLObjects.push(q)}}}};this.setupMatrices=function(e,g){e.autoUpdateMatrix&&
e.updateMatrix();j.multiply(g.matrix,e.matrix);d.viewMatrixArray=new Float32Array(g.matrix.flatten());d.modelViewMatrixArray=new Float32Array(j.flatten());d.projectionMatrixArray=new Float32Array(g.projectionMatrix.flatten());o=THREE.Matrix4.makeInvert3x3(j).transpose();d.normalMatrixArray=new Float32Array(o.m);b.uniformMatrix4fv(d.viewMatrix,false,d.viewMatrixArray);b.uniformMatrix4fv(d.modelViewMatrix,false,d.modelViewMatrixArray);b.uniformMatrix4fv(d.projectionMatrix,false,d.projectionMatrixArray);
b.uniformMatrix3fv(d.normalMatrix,false,d.normalMatrixArray);b.uniformMatrix4fv(d.objMatrix,false,new Float32Array(e.matrix.flatten()))};this.setBlending=function(e){switch(e){case THREE.AdditiveBlending:b.blendEquation(b.FUNC_ADD);b.blendFunc(b.ONE,b.ONE);break;case THREE.SubtractiveBlending:b.blendFunc(b.DST_COLOR,b.ZERO);break;default:b.blendEquation(b.FUNC_ADD);b.blendFunc(b.ONE,b.ONE_MINUS_SRC_ALPHA)}};this.setFaceCulling=function(e,g){if(e){!g||g=="ccw"?b.frontFace(b.CCW):b.frontFace(b.CW);
if(e=="back")b.cullFace(b.BACK);else e=="front"?b.cullFace(b.FRONT):b.cullFace(b.FRONT_AND_BACK);b.enable(b.CULL_FACE)}else b.disable(b.CULL_FACE)}};THREE.RenderableFace3=function(){this.v1=new THREE.Vertex;this.v2=new THREE.Vertex;this.v3=new THREE.Vertex;this.centroidWorld=new THREE.Vector3;this.centroidScreen=new THREE.Vector3;this.normalWorld=new THREE.Vector3;this.material=this.color=this.z=null};
C=e.env_map}if(A){if(!e.__webGLTexture&&e.map.image.loaded){e.__webGLTexture=b.createTexture();b.bindTexture(b.TEXTURE_2D,e.__webGLTexture);b.texImage2D(b.TEXTURE_2D,0,b.RGBA,b.RGBA,b.UNSIGNED_BYTE,e.map.image);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_S,b.CLAMP_TO_EDGE);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_T,b.CLAMP_TO_EDGE);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MAG_FILTER,b.LINEAR);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MIN_FILTER,b.LINEAR_MIPMAP_LINEAR);b.generateMipmap(b.TEXTURE_2D);
b.bindTexture(b.TEXTURE_2D,null)}b.activeTexture(b.TEXTURE0);b.bindTexture(b.TEXTURE_2D,e.__webGLTexture);b.uniform1i(d.tMap,0);b.uniform1i(d.enableMap,1)}else b.uniform1i(d.enableMap,0);if(C){if(e.env_map&&e.env_map instanceof THREE.TextureCube&&e.env_map.image.length==6){if(!e.env_map.image.__webGLTextureCube&&!e.env_map.image.__cubeMapInitialized&&e.env_map.image.loadCount==6){e.env_map.image.__webGLTextureCube=b.createTexture();b.bindTexture(b.TEXTURE_CUBE_MAP,e.env_map.image.__webGLTextureCube);
b.texParameteri(b.TEXTURE_CUBE_MAP,b.TEXTURE_WRAP_S,b.CLAMP_TO_EDGE);b.texParameteri(b.TEXTURE_CUBE_MAP,b.TEXTURE_WRAP_T,b.CLAMP_TO_EDGE);b.texParameteri(b.TEXTURE_CUBE_MAP,b.TEXTURE_MAG_FILTER,b.LINEAR);b.texParameteri(b.TEXTURE_CUBE_MAP,b.TEXTURE_MIN_FILTER,b.LINEAR_MIPMAP_LINEAR);b.texImage2D(b.TEXTURE_CUBE_MAP_POSITIVE_X,0,b.RGBA,b.RGBA,b.UNSIGNED_BYTE,e.env_map.image[0]);b.texImage2D(b.TEXTURE_CUBE_MAP_NEGATIVE_X,0,b.RGBA,b.RGBA,b.UNSIGNED_BYTE,e.env_map.image[1]);b.texImage2D(b.TEXTURE_CUBE_MAP_POSITIVE_Y,
0,b.RGBA,b.RGBA,b.UNSIGNED_BYTE,e.env_map.image[2]);b.texImage2D(b.TEXTURE_CUBE_MAP_NEGATIVE_Y,0,b.RGBA,b.RGBA,b.UNSIGNED_BYTE,e.env_map.image[3]);b.texImage2D(b.TEXTURE_CUBE_MAP_POSITIVE_Z,0,b.RGBA,b.RGBA,b.UNSIGNED_BYTE,e.env_map.image[4]);b.texImage2D(b.TEXTURE_CUBE_MAP_NEGATIVE_Z,0,b.RGBA,b.RGBA,b.UNSIGNED_BYTE,e.env_map.image[5]);b.generateMipmap(b.TEXTURE_CUBE_MAP);b.bindTexture(b.TEXTURE_CUBE_MAP,null);e.env_map.image.__cubeMapInitialized=true}b.activeTexture(b.TEXTURE1);b.bindTexture(b.TEXTURE_CUBE_MAP,
e.env_map.image.__webGLTextureCube);b.uniform1i(d.tCube,1)}b.uniform1i(d.enableCubeMap,1)}else b.uniform1i(d.enableCubeMap,0);b.bindBuffer(b.ARRAY_BUFFER,g.__webGLVertexBuffer);b.vertexAttribPointer(d.position,3,b.FLOAT,false,0,0);b.bindBuffer(b.ARRAY_BUFFER,g.__webGLNormalBuffer);b.vertexAttribPointer(d.normal,3,b.FLOAT,false,0,0);if(A){b.bindBuffer(b.ARRAY_BUFFER,g.__webGLUVBuffer);b.enableVertexAttribArray(d.uv);b.vertexAttribPointer(d.uv,2,b.FLOAT,false,0,0)}else b.disableVertexAttribArray(d.uv);
if(q){b.lineWidth(p);b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,g.__webGLLineBuffer);b.drawElements(b.LINES,g.__webGLLineCount,b.UNSIGNED_SHORT,0)}else{b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,g.__webGLFaceBuffer);b.drawElements(b.TRIANGLES,g.__webGLFaceCount,b.UNSIGNED_SHORT,0)}};this.renderPass=function(e,g,n){var i,l,q,p,s;q=0;for(p=e.material.length;q<p;q++){i=e.material[q];if(i instanceof THREE.MeshFaceMaterial){i=0;for(l=g.material.length;i<l;i++)if((s=g.material[i])&&s.blending==n){this.setBlending(s.blending);
this.renderBuffer(s,g)}}else if((s=i)&&s.blending==n){this.setBlending(s.blending);this.renderBuffer(s,g)}}};this.render=function(e,g){var n,i;this.initWebGLObjects(e);this.autoClear&&this.clear();g.autoUpdateMatrix&&g.updateMatrix();b.uniform3f(d.cameraPosition,g.position.x,g.position.y,g.position.z);this.setupLights(e);n=0;for(i=e.__webGLObjects.length;n<i;n++){webGLObject=e.__webGLObjects[n];this.setupMatrices(webGLObject.__object,g);this.renderPass(webGLObject.__object,webGLObject,THREE.NormalBlending)}n=
0;for(i=e.__webGLObjects.length;n<i;n++){webGLObject=e.__webGLObjects[n];this.setupMatrices(webGLObject.__object,g);this.renderPass(webGLObject.__object,webGLObject,THREE.AdditiveBlending);this.renderPass(webGLObject.__object,webGLObject,THREE.SubtractiveBlending)}};this.initWebGLObjects=function(e){var g,n,i,l,q;if(!e.__webGLObjects)e.__webGLObjects=[];g=0;for(n=e.objects.length;g<n;g++){i=e.objects[g];if(i instanceof THREE.Mesh)for(l in i.materialFaceGroup){q=i.materialFaceGroup[l];if(!q.__webGLVertexBuffer){this.createBuffers(i,
l);q.__object=i;e.__webGLObjects.push(q)}}}};this.setupMatrices=function(e,g){e.autoUpdateMatrix&&e.updateMatrix();j.multiply(g.matrix,e.matrix);d.viewMatrixArray=new Float32Array(g.matrix.flatten());d.modelViewMatrixArray=new Float32Array(j.flatten());d.projectionMatrixArray=new Float32Array(g.projectionMatrix.flatten());o=THREE.Matrix4.makeInvert3x3(j).transpose();d.normalMatrixArray=new Float32Array(o.m);b.uniformMatrix4fv(d.viewMatrix,false,d.viewMatrixArray);b.uniformMatrix4fv(d.modelViewMatrix,
false,d.modelViewMatrixArray);b.uniformMatrix4fv(d.projectionMatrix,false,d.projectionMatrixArray);b.uniformMatrix3fv(d.normalMatrix,false,d.normalMatrixArray);b.uniformMatrix4fv(d.objMatrix,false,new Float32Array(e.matrix.flatten()))};this.setBlending=function(e){switch(e){case THREE.AdditiveBlending:b.blendEquation(b.FUNC_ADD);b.blendFunc(b.ONE,b.ONE);break;case THREE.SubtractiveBlending:b.blendFunc(b.DST_COLOR,b.ZERO);break;default:b.blendEquation(b.FUNC_ADD);b.blendFunc(b.ONE,b.ONE_MINUS_SRC_ALPHA)}};
this.setFaceCulling=function(e,g){if(e){!g||g=="ccw"?b.frontFace(b.CCW):b.frontFace(b.CW);if(e=="back")b.cullFace(b.BACK);else e=="front"?b.cullFace(b.FRONT):b.cullFace(b.FRONT_AND_BACK);b.enable(b.CULL_FACE)}else b.disable(b.CULL_FACE)}};THREE.RenderableFace3=function(){this.v1=new THREE.Vertex;this.v2=new THREE.Vertex;this.v3=new THREE.Vertex;this.centroidWorld=new THREE.Vector3;this.centroidScreen=new THREE.Vector3;this.normalWorld=new THREE.Vector3;this.material=this.color=this.z=null};
THREE.RenderableFace4=function(){this.v1=new THREE.Vertex;this.v2=new THREE.Vertex;this.v3=new THREE.Vertex;this.v4=new THREE.Vertex;this.centroidWorld=new THREE.Vector3;this.centroidScreen=new THREE.Vector3;this.normalWorld=new THREE.Vector3;this.material=this.color=this.z=null};THREE.RenderableParticle=function(){this.rotation=this.z=this.y=this.x=null;this.scale=new THREE.Vector2;this.material=this.color=null};
THREE.RenderableLine=function(){this.v1=new THREE.Vertex;this.v2=new THREE.Vertex;this.material=this.color=this.z=null};
......@@ -5,7 +5,7 @@
<meta charset="utf-8">
<style type="text/css">
body {
background-color: #000000;
background-color: rgb(200,200,200);
margin: 0px;
overflow: hidden;
}
......@@ -65,18 +65,18 @@
wireframe = new THREE.MeshBasicMaterial( { color: 0xffffff, opacity: 0, wireframe: true } );
var context = texture_placeholder.getContext( '2d' );
context.fillStyle = 'rgba( 200, 200, 200, 1 )';
context.fillStyle = 'rgb( 200, 200, 200 )';
context.fillRect( 0, 0, texture_placeholder.width, texture_placeholder.height );
var materials = [];
materials.push( [ loadTexture( 'textures/skymap_right1024.jpg' ), wireframe ] );
materials.push( [ loadTexture( 'textures/skymap_left1024.jpg' ), wireframe ] );
materials.push( [ loadTexture( 'textures/skymap_back1024.jpg' ), wireframe ] );
materials.push( [ loadTexture( 'textures/skymap_front1024.jpg' ), wireframe ] );
materials.push( [ loadTexture( 'textures/skymap_top1024.jpg' ), wireframe ] );
materials.push( [ loadTexture( 'textures/skymap_bottom1024.jpg' ), wireframe ] );
mesh = new THREE.Mesh( new Cube( 100, 100, 100, 7, 7, materials, true ), new THREE.MeshFaceMaterial() );
materials.push( [ loadTexture( 'textures/skymap_px.jpg' ), wireframe ] ); // right
materials.push( [ loadTexture( 'textures/skymap_nx.jpg' ), wireframe ] ); // left
materials.push( [ loadTexture( 'textures/skymap_py.jpg' ), wireframe ] ); // top
materials.push( [ loadTexture( 'textures/skymap_ny.jpg' ), wireframe ] ); // bottom
materials.push( [ loadTexture( 'textures/skymap_pz.jpg' ), wireframe ] ); // back
materials.push( [ loadTexture( 'textures/skymap_nz.jpg' ), wireframe ] ); // front
mesh = new THREE.Mesh( new Cube( 300, 300, 300, 7, 7, materials, true ), new THREE.MeshFaceMaterial() );
mesh.overdraw = true;
scene.addObject( mesh );
......
......@@ -96,10 +96,19 @@
// material samples
var r = "textures/cube/SwedishRoyalCastle/";
/* right-handed */
var urls = [ r + "px.jpg", r + "nx.jpg",
r + "py.jpg", r + "ny.jpg",
r + "pz.jpg", r + "nz.jpg" ];
/* left handed */
/*
var urls = [ r + "nx.jpg", r + "px.jpg",
r + "py.jpg", r + "ny.jpg",
r + "pz.jpg", r + "nz.jpg" ];
*/
var images = THREE.loadImageArray( urls );
var reflectionCube = new THREE.TextureCube( images );
......@@ -107,7 +116,7 @@
//var cubeMaterial3 = new THREE.MeshPhongMaterial( { color: 0x000000, specular:0xaa0000, env_map: new THREE.TextureCube( images ), combine: THREE.Mix, reflectivity: 0.25 } );
var cubeMaterial3 = new THREE.MeshLambertMaterial( { color: 0xff6600, env_map: reflectionCube, combine: THREE.Mix, reflectivity: 0.3 } );
var cubeMaterial2 = new THREE.MeshLambertMaterial( { color: 0xffee00, env_map: refractionCube, refraction_ratio: 0.95 } );
var cubeMaterial2 = new THREE.MeshLambertMaterial( { color: 0xffee00, env_map: refractionCube, refraction_ratio: 1 } );
var cubeMaterial1 = new THREE.MeshLambertMaterial( { color: 0xffffff, env_map: reflectionCube } )
//createCubePlanes( 10000, images );
......@@ -171,12 +180,12 @@
function createCube( size, images ) {
var materials = [];
materials.push( new THREE.MeshBasicMaterial( { map: new THREE.Texture( images[1] ) } ) );
materials.push( new THREE.MeshBasicMaterial( { map: new THREE.Texture( images[0] ) } ) );
materials.push( new THREE.MeshBasicMaterial( { map: new THREE.Texture( images[4] ) } ) );
materials.push( new THREE.MeshBasicMaterial( { map: new THREE.Texture( images[5] ) } ) );
materials.push( new THREE.MeshBasicMaterial( { map: new THREE.Texture( images[1] ) } ) );
materials.push( new THREE.MeshBasicMaterial( { map: new THREE.Texture( images[2] ) } ) );
materials.push( new THREE.MeshBasicMaterial( { map: new THREE.Texture( images[3] ) } ) );
materials.push( new THREE.MeshBasicMaterial( { map: new THREE.Texture( images[4] ) } ) );
materials.push( new THREE.MeshBasicMaterial( { map: new THREE.Texture( images[5] ) } ) );
mesh = new THREE.Mesh( new Cube( size, size, size, 1, 1, materials, true ), new THREE.MeshFaceMaterial() );
sceneCube.addObject( mesh );
......
......@@ -89,8 +89,8 @@
scene.addObject( mesh );
//createCubePlanes( 6000, images );
//createCube( 6000, images );
createCubeWebGL( 6000, textureCube );
createCube( 6000, images );
//createCubeWebGL( 6000, textureCube );
webglRenderer = new THREE.WebGLRenderer( scene );
webglRenderer.setSize( window.innerWidth, window.innerHeight );
......@@ -127,12 +127,12 @@
function createCube( size, images ) {
var materials = [];
materials.push( new THREE.MeshBasicMaterial( { map: new THREE.Texture( images[1] ) } ) );
materials.push( new THREE.MeshBasicMaterial( { map: new THREE.Texture( images[0] ) } ) );
materials.push( new THREE.MeshBasicMaterial( { map: new THREE.Texture( images[4] ) } ) );
materials.push( new THREE.MeshBasicMaterial( { map: new THREE.Texture( images[5] ) } ) );
materials.push( new THREE.MeshBasicMaterial( { map: new THREE.Texture( images[1] ) } ) );
materials.push( new THREE.MeshBasicMaterial( { map: new THREE.Texture( images[2] ) } ) );
materials.push( new THREE.MeshBasicMaterial( { map: new THREE.Texture( images[3] ) } ) );
materials.push( new THREE.MeshBasicMaterial( { map: new THREE.Texture( images[4] ) } ) );
materials.push( new THREE.MeshBasicMaterial( { map: new THREE.Texture( images[5] ) } ) );
mesh = new THREE.Mesh( new Cube( size, size, size, 1, 1, materials, true ), new THREE.MeshFaceMaterial() );
scene.addObject( mesh );
......
......@@ -110,8 +110,8 @@
var cubeMaterial1 = new THREE.MeshBasicMaterial( { color: 0xffffff, env_map: textureCube, refraction_ratio: 0.98 } )
//createCubePlanes( 100000, images );
//createCube( 100000, images );
createCubeWebGL( 100000, textureCube );
createCube( 100000, images );
//createCubeWebGL( 100000, textureCube );
webglRenderer = new THREE.WebGLRenderer( scene );
webglRenderer.setSize( window.innerWidth, window.innerHeight );
......
......@@ -36,6 +36,7 @@
<script type="text/javascript" src="../src/extras/primitives/Sphere.js"></script>
<script type="text/javascript" src="../src/extras/primitives/Plane.js"></script>
<script type="text/javascript" src="../src/extras/primitives/Cube.js"></script>
<script type="text/javascript" src="../src/extras/GeometryUtils.js"></script>
......@@ -89,25 +90,26 @@
sphere.scale.x = sphere.scale.y = sphere.scale.z = Math.random() * 4 + 1;
// Merging spheres in a single geometry
GeometryUtils.merge( geometry, sphere );
}
var r = "textures/skymap_";
var urls = [ r + "right1024.jpg", r + "left1024.jpg",
r + "top1024.jpg", r + "bottom1024.jpg",
r + "front1024.jpg", r + "back1024.jpg" ];
var urls = [ r + "px.jpg", r + "nx.jpg",
r + "py.jpg", r + "ny.jpg",
r + "pz.jpg", r + "nz.jpg" ];
var images = THREE.loadImageArray( urls );
var textureCube = new THREE.TextureCube( images );
var material = new THREE.MeshBasicMaterial( { color: 0xffffff, env_map: textureCube } );
var mesh = new THREE.Mesh( geometry, material );
mesh.position.x = 100;
scene.addObject( mesh );
//createCubePlanes( 100000, images );
//createCube( 100000, images );
createCubeWebGL( 100000, textureCube );
createCube( 100000, images );
//createCubeWebGL( 100000, textureCube );
webglRenderer = new THREE.WebGLRenderer( scene );
webglRenderer.setSize( window.innerWidth, window.innerHeight );
......@@ -126,6 +128,20 @@
}
function addMesh( geometry, scale, x, y, z, rx, ry, rz, material ) {
mesh = new THREE.Mesh( geometry, material );
mesh.scale.x = mesh.scale.y = mesh.scale.z = scale;
mesh.position.x = x;
mesh.position.y = y;
mesh.position.z = z;
mesh.rotation.x = rx;
mesh.rotation.y = ry;
mesh.rotation.z = rz;
sceneCube.addObject(mesh);
}
function addCubeMesh( geometry, scale, x, y, z, rx, ry, rz, material ) {
mesh = new THREE.Mesh( geometry, material );
......@@ -164,12 +180,12 @@
function createCube( size, images ) {
var materials = [];
materials.push( new THREE.MeshBasicMaterial( { map: new THREE.Texture( images[1] ) } ) );
materials.push( new THREE.MeshBasicMaterial( { map: new THREE.Texture( images[0] ) } ) );
materials.push( new THREE.MeshBasicMaterial( { map: new THREE.Texture( images[4] ) } ) );
materials.push( new THREE.MeshBasicMaterial( { map: new THREE.Texture( images[5] ) } ) );
materials.push( new THREE.MeshBasicMaterial( { map: new THREE.Texture( images[1] ) } ) );
materials.push( new THREE.MeshBasicMaterial( { map: new THREE.Texture( images[2] ) } ) );
materials.push( new THREE.MeshBasicMaterial( { map: new THREE.Texture( images[3] ) } ) );
materials.push( new THREE.MeshBasicMaterial( { map: new THREE.Texture( images[4] ) } ) );
materials.push( new THREE.MeshBasicMaterial( { map: new THREE.Texture( images[5] ) } ) );
mesh = new THREE.Mesh( new Cube( size, size, size, 1, 1, materials, true ), new THREE.MeshFaceMaterial() );
sceneCube.addObject( mesh );
......
......@@ -93,9 +93,9 @@
}
var r = "textures/skymap_";
var urls = [ r + "right1024.jpg", r + "left1024.jpg",
r + "top1024.jpg", r + "bottom1024.jpg",
r + "front1024.jpg", r + "back1024.jpg" ];
var urls = [ r + "px.jpg", r + "nx.jpg",
r + "py.jpg", r + "ny.jpg",
r + "pz.jpg", r + "nz.jpg" ];
var images = THREE.loadImageArray( urls );
var textureCube = new THREE.TextureCube( images, THREE.RefractionMap );
......@@ -164,12 +164,12 @@
function createCube( size, images ) {
var materials = [];
materials.push( new THREE.MeshBasicMaterial( { map: new THREE.Texture( images[1] ) } ) );
materials.push( new THREE.MeshBasicMaterial( { map: new THREE.Texture( images[0] ) } ) );
materials.push( new THREE.MeshBasicMaterial( { map: new THREE.Texture( images[4] ) } ) );
materials.push( new THREE.MeshBasicMaterial( { map: new THREE.Texture( images[5] ) } ) );
materials.push( new THREE.MeshBasicMaterial( { map: new THREE.Texture( images[1] ) } ) );
materials.push( new THREE.MeshBasicMaterial( { map: new THREE.Texture( images[2] ) } ) );
materials.push( new THREE.MeshBasicMaterial( { map: new THREE.Texture( images[3] ) } ) );
materials.push( new THREE.MeshBasicMaterial( { map: new THREE.Texture( images[4] ) } ) );
materials.push( new THREE.MeshBasicMaterial( { map: new THREE.Texture( images[5] ) } ) );
mesh = new THREE.Mesh( new Cube( size, size, size, 1, 1, materials, true ), new THREE.MeshFaceMaterial() );
sceneCube.addObject( mesh );
......
......@@ -11,7 +11,7 @@ var Cube = function ( width, height, depth, segments_width, segments_height, mat
width_half = width / 2,
height_half = height / 2,
depth_half = depth / 2,
flip = flipped !== undefined ? - 1 : 1;
flip = flipped ? - 1 : 1;
if ( materials !== undefined ) {
......@@ -39,10 +39,14 @@ var Cube = function ( width, height, depth, segments_width, segments_height, mat
buildPlane( 'z', 'y', - 1 * flip, - 1, depth, height, width_half, this.materials[ 0 ] ); // right
buildPlane( 'z', 'y', 1 * flip, - 1, depth, height, - width_half, this.materials[ 1 ] ); // left
buildPlane( 'x', 'y', 1 * flip, - 1, width, height, depth_half, this.materials[ 2 ] ); // front
buildPlane( 'x', 'y', - 1 * flip, - 1, width, height, - depth_half, this.materials[ 3 ] ); // back
buildPlane( 'x', 'z', - 1 * flip, - 1, width, depth, height_half, this.materials[ 4 ] ); // top
buildPlane( 'x', 'z', - 1 * flip, 1, width, depth, - height_half, this.materials[ 5 ] ); // bottom
buildPlane( 'x', 'z', - 1 * flip, - 1, width, depth, height_half, this.materials[ 2 ] ); // top
buildPlane( 'x', 'z', - 1 * flip, 1, width, depth, - height_half, this.materials[ 3 ] ); // bottom
buildPlane( 'x', 'y', 1 * flip, - 1, width, height, depth_half, this.materials[ 4 ] ); // back
buildPlane( 'x', 'y', - 1 * flip, - 1, width, height, - depth_half, this.materials[ 5 ] ); // front
mergeVertices();
function buildPlane( u, v, udir, vdir, width, height, depth, material ) {
......@@ -107,6 +111,53 @@ var Cube = function ( width, height, depth, segments_width, segments_height, mat
}
function mergeVertices() {
var unique = [], changes = [];
for ( var i = 0, il = scope.vertices.length; i < il; i ++ ) {
var v = scope.vertices[ i ],
duplicate = false;
for ( var j = 0, jl = unique.length; j < jl; j ++ ) {
var vu = unique[ j ];
if( v.position.x == vu.position.x && v.position.y == vu.position.y && v.position.z == vu.position.z ) {
changes[ i ] = j;
duplicate = true;
break;
}
}
if ( ! duplicate ) {
changes[ i ] = unique.length;
unique.push( new THREE.Vertex( v.position.clone() ) );
}
}
for ( var i = 0, l = scope.faces.length; i < l; i ++ ) {
var face = scope.faces[ i ];
face.a = changes[ face.a ];
face.b = changes[ face.b ];
face.c = changes[ face.c ];
face.d = changes[ face.d ];
}
scope.vertices = unique;
}
this.computeCentroids();
this.computeNormals();
......
/**
* @author alteredq / http://alteredqualia.com/
*
* parameters = {
* env_map: new THREE.TextureCube( [posx, negx, posy, negy, posz, negz] ),
* }
*/
THREE.MeshCubeMaterial = function ( parameters ) {
this.id = THREE.MeshCubeMaterial.value ++;
this.env_map = null;
this.blending = THREE.NormalBlending;
if ( parameters ) {
if ( parameters.env_map !== undefined ) this.env_map = parameters.env_map;
}
this.toString = function () {
return 'THREE.MeshCubeMaterial( ' +
'id: ' + this.id + '<br/>' +
'env_map: ' + this.env_map + ' )';
};
}
THREE.MeshCubeMaterialCounter = { value: 0 };
......@@ -475,6 +475,8 @@ THREE.WebGLRenderer = function ( scene ) {
material.__webGLTexture = _gl.createTexture();
_gl.bindTexture( _gl.TEXTURE_2D, material.__webGLTexture );
_gl.texImage2D( _gl.TEXTURE_2D, 0, _gl.RGBA, _gl.RGBA, _gl.UNSIGNED_BYTE, material.map.image ) ;
_gl.texParameteri( _gl.TEXTURE_2D, _gl.TEXTURE_WRAP_S, _gl.CLAMP_TO_EDGE );
_gl.texParameteri( _gl.TEXTURE_2D, _gl.TEXTURE_WRAP_T, _gl.CLAMP_TO_EDGE );
_gl.texParameteri( _gl.TEXTURE_2D, _gl.TEXTURE_MAG_FILTER, _gl.LINEAR );
_gl.texParameteri( _gl.TEXTURE_2D, _gl.TEXTURE_MIN_FILTER, _gl.LINEAR_MIPMAP_LINEAR );
_gl.generateMipmap( _gl.TEXTURE_2D );
......@@ -512,16 +514,18 @@ THREE.WebGLRenderer = function ( scene ) {
_gl.texParameteri( _gl.TEXTURE_CUBE_MAP, _gl.TEXTURE_MAG_FILTER, _gl.LINEAR );
_gl.texParameteri( _gl.TEXTURE_CUBE_MAP, _gl.TEXTURE_MIN_FILTER, _gl.LINEAR_MIPMAP_LINEAR );
//_gl.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, true );
_gl.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X, 0, _gl.RGBA, _gl.RGBA, _gl.UNSIGNED_BYTE, material.env_map.image[0] );
_gl.texImage2D( _gl.TEXTURE_CUBE_MAP_NEGATIVE_X, 0, _gl.RGBA, _gl.RGBA, _gl.UNSIGNED_BYTE, material.env_map.image[1] );
//_gl.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, true );
_gl.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_Y, 0, _gl.RGBA, _gl.RGBA, _gl.UNSIGNED_BYTE, material.env_map.image[2] );
_gl.texImage2D( _gl.TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, _gl.RGBA, _gl.RGBA, _gl.UNSIGNED_BYTE, material.env_map.image[3] );
//_gl.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, false );
_gl.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_Z, 0, _gl.RGBA, _gl.RGBA, _gl.UNSIGNED_BYTE, material.env_map.image[4] );
_gl.texImage2D( _gl.TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, _gl.RGBA, _gl.RGBA, _gl.UNSIGNED_BYTE, material.env_map.image[5] );
//_gl.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, false );
_gl.generateMipmap( _gl.TEXTURE_CUBE_MAP );
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册