Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- THREE.RenderableObject=function(){this.id=0,this.object=null,this.z=0},THREE.RenderableFace=function(){this.id=0,this.v1=new THREE.RenderableVertex,this.v2=new THREE.RenderableVertex,this.v3=new THREE.RenderableVertex,this.normalModel=new THREE.Vector3,this.vertexNormalsModel=[new THREE.Vector3,new THREE.Vector3,new THREE.Vector3],this.vertexNormalsLength=0,this.color=new THREE.Color,this.material=null,this.uvs=[new THREE.Vector2,new THREE.Vector2,new THREE.Vector2],this.z=0},THREE.RenderableVertex=function(){this.position=new THREE.Vector3,this.positionWorld=new THREE.Vector3,this.positionScreen=new THREE.Vector4,this.visible=!0},THREE.RenderableVertex.prototype.copy=function(vertex){this.positionWorld.copy(vertex.positionWorld),this.positionScreen.copy(vertex.positionScreen)},THREE.RenderableLine=function(){this.id=0,this.v1=new THREE.RenderableVertex,this.v2=new THREE.RenderableVertex,this.vertexColors=[new THREE.Color,new THREE.Color],this.material=null,this.z=0},THREE.RenderableSprite=function(){this.id=0,this.object=null,this.x=0,this.y=0,this.z=0,this.rotation=0,this.scale=new THREE.Vector2,this.material=null},THREE.Projector=function(){function getNextObjectInPool(){if(_objectCount===_objectPoolLength){var object=new THREE.RenderableObject;return _objectPool.push(object),_objectPoolLength++,_objectCount++,object}return _objectPool[_objectCount++]}function getNextVertexInPool(){if(_vertexCount===_vertexPoolLength){var vertex=new THREE.RenderableVertex;return _vertexPool.push(vertex),_vertexPoolLength++,_vertexCount++,vertex}return _vertexPool[_vertexCount++]}function getNextFaceInPool(){if(_faceCount===_facePoolLength){var face=new THREE.RenderableFace;return _facePool.push(face),_facePoolLength++,_faceCount++,face}return _facePool[_faceCount++]}function getNextLineInPool(){if(_lineCount===_linePoolLength){var line=new THREE.RenderableLine;return _linePool.push(line),_linePoolLength++,_lineCount++,line}return _linePool[_lineCount++]}function getNextSpriteInPool(){if(_spriteCount===_spritePoolLength){var sprite=new THREE.RenderableSprite;return _spritePool.push(sprite),_spritePoolLength++,_spriteCount++,sprite}return _spritePool[_spriteCount++]}function painterSort(a,b){return a.z!==b.z?b.z-a.z:a.id!==b.id?a.id-b.id:0}function clipLine(s1,s2){var alpha1=0,alpha2=1,bc1near=s1.z+s1.w,bc2near=s2.z+s2.w,bc1far=-s1.z+s1.w,bc2far=-s2.z+s2.w;return bc1near>=0&&bc2near>=0&&bc1far>=0&&bc2far>=0?!0:0>bc1near&&0>bc2near||0>bc1far&&0>bc2far?!1:(0>bc1near?alpha1=Math.max(alpha1,bc1near/(bc1near-bc2near)):0>bc2near&&(alpha2=Math.min(alpha2,bc1near/(bc1near-bc2near))),0>bc1far?alpha1=Math.max(alpha1,bc1far/(bc1far-bc2far)):0>bc2far&&(alpha2=Math.min(alpha2,bc1far/(bc1far-bc2far))),alpha1>alpha2?!1:(s1.lerp(s2,alpha1),s2.lerp(s1,1-alpha2),!0))}var _object,_objectCount,_vertex,_vertexCount,_face,_faceCount,_line,_lineCount,_sprite,_spriteCount,_modelMatrix,_objectPool=[],_objectPoolLength=0,_vertexPool=[],_vertexPoolLength=0,_facePool=[],_facePoolLength=0,_linePool=[],_linePoolLength=0,_spritePool=[],_spritePoolLength=0,_renderData={objects:[],lights:[],elements:[]},_vA=new THREE.Vector3,_vB=new THREE.Vector3,_vC=new THREE.Vector3,_vector3=new THREE.Vector3,_vector4=new THREE.Vector4,_clipBox=new THREE.Box3(new THREE.Vector3(-1,-1,-1),new THREE.Vector3(1,1,1)),_boundingBox=new THREE.Box3,_points3=new Array(3),_viewMatrix=(new Array(4),new THREE.Matrix4),_viewProjectionMatrix=new THREE.Matrix4,_modelViewProjectionMatrix=new THREE.Matrix4,_normalMatrix=new THREE.Matrix3,_frustum=new THREE.Frustum,_clippedVertex1PositionScreen=new THREE.Vector4,_clippedVertex2PositionScreen=new THREE.Vector4;this.projectVector=function(vector,camera){console.warn("THREE.Projector: .projectVector() is now vector.project()."),vector.project(camera)},this.unprojectVector=function(vector,camera){console.warn("THREE.Projector: .unprojectVector() is now vector.unproject()."),vector.unproject(camera)},this.pickingRay=function(vector,camera){console.error("THREE.Projector: .pickingRay() is now raycaster.setFromCamera().")};var RenderList=function(){var normals=[],uvs=[],object=null,material=null,normalMatrix=new THREE.Matrix3,setObject=function(value){object=value,material=object.material,normalMatrix.getNormalMatrix(object.matrixWorld),normals.length=0,uvs.length=0},projectVertex=function(vertex){var position=vertex.position,positionWorld=vertex.positionWorld,positionScreen=vertex.positionScreen;positionWorld.copy(position).applyMatrix4(_modelMatrix),positionScreen.copy(positionWorld).applyMatrix4(_viewProjectionMatrix);var invW=1/positionScreen.w;positionScreen.x*=invW,positionScreen.y*=invW,positionScreen.z*=invW,vertex.visible=positionScreen.x>=-1&&positionScreen.x<=1&&positionScreen.y>=-1&&positionScreen.y<=1&&positionScreen.z>=-1&&positionScreen.z<=1},pushVertex=function(x,y,z){_vertex=getNextVertexInPool(),_vertex.position.set(x,y,z),projectVertex(_vertex)},pushNormal=function(x,y,z){normals.push(x,y,z)},pushUv=function(x,y){uvs.push(x,y)},checkTriangleVisibility=function(v1,v2,v3){return v1.visible===!0||v2.visible===!0||v3.visible===!0?!0:(_points3[0]=v1.positionScreen,_points3[1]=v2.positionScreen,_points3[2]=v3.positionScreen,_clipBox.isIntersectionBox(_boundingBox.setFromPoints(_points3)))},checkBackfaceCulling=function(v1,v2,v3){return(v3.positionScreen.x-v1.positionScreen.x)*(v2.positionScreen.y-v1.positionScreen.y)-(v3.positionScreen.y-v1.positionScreen.y)*(v2.positionScreen.x-v1.positionScreen.x)<0},pushLine=function(a,b){var v1=_vertexPool[a],v2=_vertexPool[b];_line=getNextLineInPool(),_line.id=object.id,_line.v1.copy(v1),_line.v2.copy(v2),_line.z=(v1.positionScreen.z+v2.positionScreen.z)/2,_line.material=object.material,_renderData.elements.push(_line)},pushTriangle=function(a,b,c){var v1=_vertexPool[a],v2=_vertexPool[b],v3=_vertexPool[c];if(checkTriangleVisibility(v1,v2,v3)!==!1&&(material.side===THREE.DoubleSide||checkBackfaceCulling(v1,v2,v3)===!0)){_face=getNextFaceInPool(),_face.id=object.id,_face.v1.copy(v1),_face.v2.copy(v2),_face.v3.copy(v3),_face.z=(v1.positionScreen.z+v2.positionScreen.z+v3.positionScreen.z)/3;for(var i=0;3>i;i++){var offset=3*arguments[i],normal=_face.vertexNormalsModel[i];normal.set(normals[offset],normals[offset+1],normals[offset+2]),normal.applyMatrix3(normalMatrix).normalize();var offset2=2*arguments[i],uv=_face.uvs[i];uv.set(uvs[offset2],uvs[offset2+1])}_face.vertexNormalsLength=3,_face.material=object.material,_renderData.elements.push(_face)}};return{setObject:setObject,projectVertex:projectVertex,checkTriangleVisibility:checkTriangleVisibility,checkBackfaceCulling:checkBackfaceCulling,pushVertex:pushVertex,pushNormal:pushNormal,pushUv:pushUv,pushLine:pushLine,pushTriangle:pushTriangle}},renderList=new RenderList;this.projectScene=function(scene,camera,sortObjects,sortElements){_faceCount=0,_lineCount=0,_spriteCount=0,_renderData.elements.length=0,scene.autoUpdate===!0&&scene.updateMatrixWorld(),void 0===camera.parent&&camera.updateMatrixWorld(),_viewMatrix.copy(camera.matrixWorldInverse.getInverse(camera.matrixWorld)),_viewProjectionMatrix.multiplyMatrices(camera.projectionMatrix,_viewMatrix),_frustum.setFromMatrix(_viewProjectionMatrix),_objectCount=0,_renderData.objects.length=0,_renderData.lights.length=0,scene.traverseVisible(function(object){if(object instanceof THREE.Light)_renderData.lights.push(object);else if(object instanceof THREE.Mesh||object instanceof THREE.Line||object instanceof THREE.Sprite){if(object.material.visible===!1)return;(object.frustumCulled===!1||_frustum.intersectsObject(object)===!0)&&(_object=getNextObjectInPool(),_object.id=object.id,_object.object=object,_vector3.setFromMatrixPosition(object.matrixWorld),_vector3.applyProjection(_viewProjectionMatrix),_object.z=_vector3.z,_renderData.objects.push(_object))}}),sortObjects===!0&&_renderData.objects.sort(painterSort);for(var o=0,ol=_renderData.objects.length;ol>o;o++){var object=_renderData.objects[o].object,geometry=object.geometry;if(renderList.setObject(object),_modelMatrix=object.matrixWorld,_vertexCount=0,object instanceof THREE.Mesh){if(geometry instanceof THREE.BufferGeometry){var attributes=geometry.attributes,offsets=geometry.offsets;if(void 0===attributes.position)continue;for(var positions=attributes.position.array,i=0,l=positions.length;l>i;i+=3)renderList.pushVertex(positions[i],positions[i+1],positions[i+2]);if(void 0!==attributes.normal)for(var normals=attributes.normal.array,i=0,l=normals.length;l>i;i+=3)renderList.pushNormal(normals[i],normals[i+1],normals[i+2]);if(void 0!==attributes.uv)for(var uvs=attributes.uv.array,i=0,l=uvs.length;l>i;i+=2)renderList.pushUv(uvs[i],uvs[i+1]);if(void 0!==attributes.index){var indices=attributes.index.array;if(offsets.length>0)for(var o=0;o<offsets.length;o++)for(var offset=offsets[o],index=offset.index,i=offset.start,l=offset.start+offset.count;l>i;i+=3)renderList.pushTriangle(indices[i]+index,indices[i+1]+index,indices[i+2]+index);else for(var i=0,l=indices.length;l>i;i+=3)renderList.pushTriangle(indices[i],indices[i+1],indices[i+2])}else for(var i=0,l=positions.length/3;l>i;i+=3)renderList.pushTriangle(i,i+1,i+2)}else if(geometry instanceof THREE.Geometry){var vertices=geometry.vertices,faces=geometry.faces,faceVertexUvs=geometry.faceVertexUvs[0];_normalMatrix.getNormalMatrix(_modelMatrix);for(var isFaceMaterial=object.material instanceof THREE.MeshFaceMaterial,objectMaterials=isFaceMaterial===!0?object.material:null,v=0,vl=vertices.length;vl>v;v++){var vertex=vertices[v];renderList.pushVertex(vertex.x,vertex.y,vertex.z)}for(var f=0,fl=faces.length;fl>f;f++){var face=faces[f],material=isFaceMaterial===!0?objectMaterials.materials[face.materialIndex]:object.material;if(void 0!==material){var side=material.side,v1=_vertexPool[face.a],v2=_vertexPool[face.b],v3=_vertexPool[face.c];if(material.morphTargets===!0){var morphTargets=geometry.morphTargets,morphInfluences=object.morphTargetInfluences,v1p=v1.position,v2p=v2.position,v3p=v3.position;_vA.set(0,0,0),_vB.set(0,0,0),_vC.set(0,0,0);for(var t=0,tl=morphTargets.length;tl>t;t++){var influence=morphInfluences[t];if(0!==influence){var targets=morphTargets[t].vertices;_vA.x+=(targets[face.a].x-v1p.x)*influence,_vA.y+=(targets[face.a].y-v1p.y)*influence,_vA.z+=(targets[face.a].z-v1p.z)*influence,_vB.x+=(targets[face.b].x-v2p.x)*influence,_vB.y+=(targets[face.b].y-v2p.y)*influence,_vB.z+=(targets[face.b].z-v2p.z)*influence,_vC.x+=(targets[face.c].x-v3p.x)*influence,_vC.y+=(targets[face.c].y-v3p.y)*influence,_vC.z+=(targets[face.c].z-v3p.z)*influence}}v1.position.add(_vA),v2.position.add(_vB),v3.position.add(_vC),renderList.projectVertex(v1),renderList.projectVertex(v2),renderList.projectVertex(v3)}if(renderList.checkTriangleVisibility(v1,v2,v3)!==!1){var visible=renderList.checkBackfaceCulling(v1,v2,v3);if(side!==THREE.DoubleSide){if(side===THREE.FrontSide&&visible===!1)continue;if(side===THREE.BackSide&&visible===!0)continue}_face=getNextFaceInPool(),_face.id=object.id,_face.v1.copy(v1),_face.v2.copy(v2),_face.v3.copy(v3),_face.normalModel.copy(face.normal),visible!==!1||side!==THREE.BackSide&&side!==THREE.DoubleSide||_face.normalModel.negate(),_face.normalModel.applyMatrix3(_normalMatrix).normalize();for(var faceVertexNormals=face.vertexNormals,n=0,nl=Math.min(faceVertexNormals.length,3);nl>n;n++){var normalModel=_face.vertexNormalsModel[n];normalModel.copy(faceVertexNormals[n]),visible!==!1||side!==THREE.BackSide&&side!==THREE.DoubleSide||normalModel.negate(),normalModel.applyMatrix3(_normalMatrix).normalize()}_face.vertexNormalsLength=faceVertexNormals.length;var vertexUvs=faceVertexUvs[f];if(void 0!==vertexUvs)for(var u=0;3>u;u++)_face.uvs[u].copy(vertexUvs[u]);_face.color=face.color,_face.material=material,_face.z=(v1.positionScreen.z+v2.positionScreen.z+v3.positionScreen.z)/3,_renderData.elements.push(_face)}}}}}else if(object instanceof THREE.Line){if(geometry instanceof THREE.BufferGeometry){var attributes=geometry.attributes;if(void 0!==attributes.position){for(var positions=attributes.position.array,i=0,l=positions.length;l>i;i+=3)renderList.pushVertex(positions[i],positions[i+1],positions[i+2]);if(void 0!==attributes.index)for(var indices=attributes.index.array,i=0,l=indices.length;l>i;i+=2)renderList.pushLine(indices[i],indices[i+1]);else for(var step=object.mode===THREE.LinePieces?2:1,i=0,l=positions.length/3-1;l>i;i+=step)renderList.pushLine(i,i+1)}}else if(geometry instanceof THREE.Geometry){_modelViewProjectionMatrix.multiplyMatrices(_viewProjectionMatrix,_modelMatrix);var vertices=object.geometry.vertices;if(0===vertices.length)continue;v1=getNextVertexInPool(),v1.positionScreen.copy(vertices[0]).applyMatrix4(_modelViewProjectionMatrix);for(var step=object.mode===THREE.LinePieces?2:1,v=1,vl=vertices.length;vl>v;v++)v1=getNextVertexInPool(),v1.positionScreen.copy(vertices[v]).applyMatrix4(_modelViewProjectionMatrix),(v+1)%step>0||(v2=_vertexPool[_vertexCount-2],_clippedVertex1PositionScreen.copy(v1.positionScreen),_clippedVertex2PositionScreen.copy(v2.positionScreen),clipLine(_clippedVertex1PositionScreen,_clippedVertex2PositionScreen)===!0&&(_clippedVertex1PositionScreen.multiplyScalar(1/_clippedVertex1PositionScreen.w),_clippedVertex2PositionScreen.multiplyScalar(1/_clippedVertex2PositionScreen.w),_line=getNextLineInPool(),_line.id=object.id,_line.v1.positionScreen.copy(_clippedVertex1PositionScreen),_line.v2.positionScreen.copy(_clippedVertex2PositionScreen),_line.z=Math.max(_clippedVertex1PositionScreen.z,_clippedVertex2PositionScreen.z),_line.material=object.material,object.material.vertexColors===THREE.VertexColors&&(_line.vertexColors[0].copy(object.geometry.colors[v]),_line.vertexColors[1].copy(object.geometry.colors[v-1])),_renderData.elements.push(_line)))}}else if(object instanceof THREE.Sprite){_vector4.set(_modelMatrix.elements[12],_modelMatrix.elements[13],_modelMatrix.elements[14],1),_vector4.applyMatrix4(_viewProjectionMatrix);var invW=1/_vector4.w;_vector4.z*=invW,_vector4.z>=-1&&_vector4.z<=1&&(_sprite=getNextSpriteInPool(),_sprite.id=object.id,_sprite.x=_vector4.x*invW,_sprite.y=_vector4.y*invW,_sprite.z=_vector4.z,_sprite.object=object,_sprite.rotation=object.rotation,_sprite.scale.x=object.scale.x*Math.abs(_sprite.x-(_vector4.x+camera.projectionMatrix.elements[0])/(_vector4.w+camera.projectionMatrix.elements[12])),_sprite.scale.y=object.scale.y*Math.abs(_sprite.y-(_vector4.y+camera.projectionMatrix.elements[5])/(_vector4.w+camera.projectionMatrix.elements[13])),_sprite.material=object.material,_renderData.elements.push(_sprite))}}return sortElements===!0&&_renderData.elements.sort(painterSort),_renderData}},THREE.SpriteCanvasMaterial=function(parameters){THREE.Material.call(this),this.type="SpriteCanvasMaterial",this.color=new THREE.Color(16777215),this.program=function(context,color){},this.setValues(parameters)},THREE.SpriteCanvasMaterial.prototype=Object.create(THREE.Material.prototype),THREE.SpriteCanvasMaterial.prototype.constructor=THREE.SpriteCanvasMaterial,THREE.SpriteCanvasMaterial.prototype.clone=function(){var material=new THREE.SpriteCanvasMaterial;return THREE.Material.prototype.clone.call(this,material),material.color.copy(this.color),material.program=this.program,material},THREE.CanvasRenderer=function(parameters){function calculateLights(){_ambientLight.setRGB(0,0,0),_directionalLights.setRGB(0,0,0),_pointLights.setRGB(0,0,0);for(var l=0,ll=_lights.length;ll>l;l++){var light=_lights[l],lightColor=light.color;light instanceof THREE.AmbientLight?_ambientLight.add(lightColor):light instanceof THREE.DirectionalLight?_directionalLights.add(lightColor):light instanceof THREE.PointLight&&_pointLights.add(lightColor)}}function calculateLight(position,normal,color){for(var l=0,ll=_lights.length;ll>l;l++){var light=_lights[l];if(_lightColor.copy(light.color),light instanceof THREE.DirectionalLight){var lightPosition=_vector3.setFromMatrixPosition(light.matrixWorld).normalize(),amount=normal.dot(lightPosition);if(0>=amount)continue;amount*=light.intensity,color.add(_lightColor.multiplyScalar(amount))}else if(light instanceof THREE.PointLight){var lightPosition=_vector3.setFromMatrixPosition(light.matrixWorld),amount=normal.dot(_vector3.subVectors(lightPosition,position).normalize());if(0>=amount)continue;if(amount*=0==light.distance?1:1-Math.min(position.distanceTo(lightPosition)/light.distance,1),0==amount)continue;amount*=light.intensity,color.add(_lightColor.multiplyScalar(amount))}}}function renderSprite(v1,element,material){setOpacity(material.opacity),setBlending(material.blending);var scaleX=element.scale.x*_canvasWidthHalf,scaleY=element.scale.y*_canvasHeightHalf,dist=.5*Math.sqrt(scaleX*scaleX+scaleY*scaleY);if(_elemBox.min.set(v1.x-dist,v1.y-dist),_elemBox.max.set(v1.x+dist,v1.y+dist),material instanceof THREE.SpriteMaterial){var texture=material.map;if(null!==texture&&void 0!==texture.image){texture.hasEventListener("update",onTextureUpdate)===!1&&(texture.image.width>0&&textureToPattern(texture),texture.addEventListener("update",onTextureUpdate));var pattern=_patterns[texture.id];setFillStyle(void 0!==pattern?pattern:"rgba( 0, 0, 0, 1 )");var bitmap=texture.image,ox=bitmap.width*texture.offset.x,oy=bitmap.height*texture.offset.y,sx=bitmap.width*texture.repeat.x,sy=bitmap.height*texture.repeat.y,cx=scaleX/sx,cy=scaleY/sy;_context.save(),_context.translate(v1.x,v1.y),0!==material.rotation&&_context.rotate(material.rotation),_context.translate(-scaleX/2,-scaleY/2),_context.scale(cx,cy),_context.translate(-ox,-oy),_context.fillRect(ox,oy,sx,sy),_context.restore()}else setFillStyle(material.color.getStyle()),_context.save(),_context.translate(v1.x,v1.y),0!==material.rotation&&_context.rotate(material.rotation),_context.scale(scaleX,-scaleY),_context.fillRect(-.5,-.5,1,1),_context.restore()}else material instanceof THREE.SpriteCanvasMaterial&&(setStrokeStyle(material.color.getStyle()),setFillStyle(material.color.getStyle()),_context.save(),_context.translate(v1.x,v1.y),0!==material.rotation&&_context.rotate(material.rotation),_context.scale(scaleX,scaleY),material.program(_context),_context.restore())}function renderLine(v1,v2,element,material){if(setOpacity(material.opacity),setBlending(material.blending),_context.beginPath(),_context.moveTo(v1.positionScreen.x,v1.positionScreen.y),_context.lineTo(v2.positionScreen.x,v2.positionScreen.y),material instanceof THREE.LineBasicMaterial){if(setLineWidth(material.linewidth),setLineCap(material.linecap),setLineJoin(material.linejoin),material.vertexColors!==THREE.VertexColors)setStrokeStyle(material.color.getStyle());else{var colorStyle1=element.vertexColors[0].getStyle(),colorStyle2=element.vertexColors[1].getStyle();if(colorStyle1===colorStyle2)setStrokeStyle(colorStyle1);else{try{var grad=_context.createLinearGradient(v1.positionScreen.x,v1.positionScreen.y,v2.positionScreen.x,v2.positionScreen.y);grad.addColorStop(0,colorStyle1),grad.addColorStop(1,colorStyle2)}catch(exception){grad=colorStyle1}setStrokeStyle(grad)}}_context.stroke(),_elemBox.expandByScalar(2*material.linewidth)}else material instanceof THREE.LineDashedMaterial&&(setLineWidth(material.linewidth),setLineCap(material.linecap),setLineJoin(material.linejoin),setStrokeStyle(material.color.getStyle()),setLineDash([material.dashSize,material.gapSize]),_context.stroke(),_elemBox.expandByScalar(2*material.linewidth),setLineDash([]))}function renderFace3(v1,v2,v3,uv1,uv2,uv3,element,material){if(_this.info.render.vertices+=3,_this.info.render.faces++,setOpacity(material.opacity),setBlending(material.blending),_v1x=v1.positionScreen.x,_v1y=v1.positionScreen.y,_v2x=v2.positionScreen.x,_v2y=v2.positionScreen.y,_v3x=v3.positionScreen.x,_v3y=v3.positionScreen.y,drawTriangle(_v1x,_v1y,_v2x,_v2y,_v3x,_v3y),(material instanceof THREE.MeshLambertMaterial||material instanceof THREE.MeshPhongMaterial)&&null===material.map)_diffuseColor.copy(material.color),_emissiveColor.copy(material.emissive),material.vertexColors===THREE.FaceColors&&_diffuseColor.multiply(element.color),_color.copy(_ambientLight),_centroid.copy(v1.positionWorld).add(v2.positionWorld).add(v3.positionWorld).divideScalar(3),calculateLight(_centroid,element.normalModel,_color),_color.multiply(_diffuseColor).add(_emissiveColor),material.wireframe===!0?strokePath(_color,material.wireframeLinewidth,material.wireframeLinecap,material.wireframeLinejoin):fillPath(_color);else if(material instanceof THREE.MeshBasicMaterial||material instanceof THREE.MeshLambertMaterial||material instanceof THREE.MeshPhongMaterial)if(null!==material.map){var mapping=material.map.mapping;mapping===THREE.UVMapping&&(_uvs=element.uvs,patternPath(_v1x,_v1y,_v2x,_v2y,_v3x,_v3y,_uvs[uv1].x,_uvs[uv1].y,_uvs[uv2].x,_uvs[uv2].y,_uvs[uv3].x,_uvs[uv3].y,material.map))}else null!==material.envMap?material.envMap.mapping===THREE.SphericalReflectionMapping&&(_normal.copy(element.vertexNormalsModel[uv1]).applyMatrix3(_normalViewMatrix),_uv1x=.5*_normal.x+.5,_uv1y=.5*_normal.y+.5,_normal.copy(element.vertexNormalsModel[uv2]).applyMatrix3(_normalViewMatrix),_uv2x=.5*_normal.x+.5,_uv2y=.5*_normal.y+.5,_normal.copy(element.vertexNormalsModel[uv3]).applyMatrix3(_normalViewMatrix),_uv3x=.5*_normal.x+.5,_uv3y=.5*_normal.y+.5,patternPath(_v1x,_v1y,_v2x,_v2y,_v3x,_v3y,_uv1x,_uv1y,_uv2x,_uv2y,_uv3x,_uv3y,material.envMap)):(_color.copy(material.color),material.vertexColors===THREE.FaceColors&&_color.multiply(element.color),material.wireframe===!0?strokePath(_color,material.wireframeLinewidth,material.wireframeLinecap,material.wireframeLinejoin):fillPath(_color));else material instanceof THREE.MeshDepthMaterial?(_color.r=_color.g=_color.b=1-smoothstep(v1.positionScreen.z*v1.positionScreen.w,_camera.near,_camera.far),material.wireframe===!0?strokePath(_color,material.wireframeLinewidth,material.wireframeLinecap,material.wireframeLinejoin):fillPath(_color)):material instanceof THREE.MeshNormalMaterial?(_normal.copy(element.normalModel).applyMatrix3(_normalViewMatrix),_color.setRGB(_normal.x,_normal.y,_normal.z).multiplyScalar(.5).addScalar(.5),material.wireframe===!0?strokePath(_color,material.wireframeLinewidth,material.wireframeLinecap,material.wireframeLinejoin):fillPath(_color)):(_color.setRGB(1,1,1),material.wireframe===!0?strokePath(_color,material.wireframeLinewidth,material.wireframeLinecap,material.wireframeLinejoin):fillPath(_color))}function drawTriangle(x0,y0,x1,y1,x2,y2){_context.beginPath(),_context.moveTo(x0,y0),_context.lineTo(x1,y1),_context.lineTo(x2,y2),_context.closePath()}function strokePath(color,linewidth,linecap,linejoin){setLineWidth(linewidth),setLineCap(linecap),setLineJoin(linejoin),setStrokeStyle(color.getStyle()),_context.stroke(),_elemBox.expandByScalar(2*linewidth)}function fillPath(color){setFillStyle(color.getStyle()),_context.fill()}function onTextureUpdate(event){textureToPattern(event.target)}function textureToPattern(texture){if(!(texture instanceof THREE.CompressedTexture)){var repeatX=texture.wrapS===THREE.RepeatWrapping,repeatY=texture.wrapT===THREE.RepeatWrapping,image=texture.image,canvas=document.createElement("canvas");canvas.width=image.width,canvas.height=image.height;var context=canvas.getContext("2d");context.setTransform(1,0,0,-1,0,image.height),context.drawImage(image,0,0),_patterns[texture.id]=_context.createPattern(canvas,repeatX===!0&&repeatY===!0?"repeat":repeatX===!0&&repeatY===!1?"repeat-x":repeatX===!1&&repeatY===!0?"repeat-y":"no-repeat")}}function patternPath(x0,y0,x1,y1,x2,y2,u0,v0,u1,v1,u2,v2,texture){if(!(texture instanceof THREE.DataTexture)){texture.hasEventListener("update",onTextureUpdate)===!1&&(void 0!==texture.image&&texture.image.width>0&&textureToPattern(texture),texture.addEventListener("update",onTextureUpdate));var pattern=_patterns[texture.id];if(void 0===pattern)return setFillStyle("rgba(0,0,0,1)"),void _context.fill();setFillStyle(pattern);var a,b,c,d,e,f,det,idet,offsetX=texture.offset.x/texture.repeat.x,offsetY=texture.offset.y/texture.repeat.y,width=texture.image.width*texture.repeat.x,height=texture.image.height*texture.repeat.y;u0=(u0+offsetX)*width,v0=(v0+offsetY)*height,u1=(u1+offsetX)*width,v1=(v1+offsetY)*height,u2=(u2+offsetX)*width,v2=(v2+offsetY)*height,x1-=x0,y1-=y0,x2-=x0,y2-=y0,u1-=u0,v1-=v0,u2-=u0,v2-=v0,det=u1*v2-u2*v1,0!==det&&(idet=1/det,a=(v2*x1-v1*x2)*idet,b=(v2*y1-v1*y2)*idet,c=(u1*x2-u2*x1)*idet,d=(u1*y2-u2*y1)*idet,e=x0-a*u0-c*v0,f=y0-b*u0-d*v0,_context.save(),_context.transform(a,b,c,d,e,f),_context.fill(),_context.restore())}}function expand(v1,v2,pixels){var idet,x=v2.x-v1.x,y=v2.y-v1.y,det=x*x+y*y;0!==det&&(idet=pixels/Math.sqrt(det),x*=idet,y*=idet,v2.x+=x,v2.y+=y,v1.x-=x,v1.y-=y)}function setOpacity(value){_contextGlobalAlpha!==value&&(_context.globalAlpha=value,_contextGlobalAlpha=value)}function setBlending(value){_contextGlobalCompositeOperation!==value&&(value===THREE.NormalBlending?_context.globalCompositeOperation="source-over":value===THREE.AdditiveBlending?_context.globalCompositeOperation="lighter":value===THREE.SubtractiveBlending&&(_context.globalCompositeOperation="darker"),_contextGlobalCompositeOperation=value)}function setLineWidth(value){_contextLineWidth!==value&&(_context.lineWidth=value,_contextLineWidth=value)}function setLineCap(value){_contextLineCap!==value&&(_context.lineCap=value,_contextLineCap=value)}function setLineJoin(value){_contextLineJoin!==value&&(_context.lineJoin=value,_contextLineJoin=value)}function setStrokeStyle(value){_contextStrokeStyle!==value&&(_context.strokeStyle=value,_contextStrokeStyle=value)}function setFillStyle(value){_contextFillStyle!==value&&(_context.fillStyle=value,_contextFillStyle=value)}function setLineDash(value){_contextLineDash.length!==value.length&&(_context.setLineDash(value),_contextLineDash=value)}console.log("THREE.CanvasRenderer",THREE.REVISION);var smoothstep=THREE.Math.smoothstep;parameters=parameters||{};var _renderData,_elements,_lights,_camera,_v1,_v2,_v3,_v1x,_v1y,_v2x,_v2y,_v3x,_v3y,_uvs,_uv1x,_uv1y,_uv2x,_uv2y,_uv3x,_uv3y,_this=this,_projector=new THREE.Projector,_canvas=void 0!==parameters.canvas?parameters.canvas:document.createElement("canvas"),_canvasWidth=_canvas.width,_canvasHeight=_canvas.height,_canvasWidthHalf=Math.floor(_canvasWidth/2),_canvasHeightHalf=Math.floor(_canvasHeight/2),_viewportX=0,_viewportY=0,_viewportWidth=_canvasWidth,_viewportHeight=_canvasHeight,pixelRatio=1,_context=_canvas.getContext("2d",{alpha:parameters.alpha===!0}),_clearColor=new THREE.Color(0),_clearAlpha=parameters.alpha===!0?0:1,_contextGlobalAlpha=1,_contextGlobalCompositeOperation=0,_contextStrokeStyle=null,_contextFillStyle=null,_contextLineWidth=null,_contextLineCap=null,_contextLineJoin=null,_contextLineDash=[],_color=(new THREE.RenderableVertex,new THREE.RenderableVertex,new THREE.Color),_diffuseColor=(new THREE.Color,new THREE.Color,new THREE.Color,new THREE.Color,new THREE.Color),_emissiveColor=new THREE.Color,_lightColor=new THREE.Color,_patterns={},_clipBox=new THREE.Box2,_clearBox=new THREE.Box2,_elemBox=new THREE.Box2,_ambientLight=new THREE.Color,_directionalLights=new THREE.Color,_pointLights=new THREE.Color,_vector3=new THREE.Vector3,_centroid=new THREE.Vector3,_normal=new THREE.Vector3,_normalViewMatrix=new THREE.Matrix3;void 0===_context.setLineDash&&(_context.setLineDash=function(){}),this.domElement=_canvas,this.autoClear=!0,this.sortObjects=!0,this.sortElements=!0,this.info={render:{vertices:0,faces:0}},this.supportsVertexTextures=function(){},this.setFaceCulling=function(){},this.getPixelRatio=function(){return pixelRatio},this.setPixelRatio=function(value){pixelRatio=value},this.setSize=function(width,height,updateStyle){_canvasWidth=width*pixelRatio,_canvasHeight=height*pixelRatio,_canvas.width=_canvasWidth,_canvas.height=_canvasHeight,_canvasWidthHalf=Math.floor(_canvasWidth/2),_canvasHeightHalf=Math.floor(_canvasHeight/2),updateStyle!==!1&&(_canvas.style.width=width+"px",_canvas.style.height=height+"px"),_clipBox.min.set(-_canvasWidthHalf,-_canvasHeightHalf),_clipBox.max.set(_canvasWidthHalf,_canvasHeightHalf),_clearBox.min.set(-_canvasWidthHalf,-_canvasHeightHalf),_clearBox.max.set(_canvasWidthHalf,_canvasHeightHalf),_contextGlobalAlpha=1,_contextGlobalCompositeOperation=0,_contextStrokeStyle=null,_contextFillStyle=null,_contextLineWidth=null,_contextLineCap=null,_contextLineJoin=null,this.setViewport(0,0,width,height)},this.setViewport=function(x,y,width,height){_viewportX=x*pixelRatio,_viewportY=y*pixelRatio,_viewportWidth=width*pixelRatio,_viewportHeight=height*pixelRatio},this.setScissor=function(){},this.enableScissorTest=function(){},this.setClearColor=function(color,alpha){_clearColor.set(color),_clearAlpha=void 0!==alpha?alpha:1,_clearBox.min.set(-_canvasWidthHalf,-_canvasHeightHalf),_clearBox.max.set(_canvasWidthHalf,_canvasHeightHalf)},this.setClearColorHex=function(hex,alpha){console.warn("THREE.CanvasRenderer: .setClearColorHex() is being removed. Use .setClearColor() instead."),this.setClearColor(hex,alpha)},this.getClearColor=function(){return _clearColor},this.getClearAlpha=function(){return _clearAlpha},this.getMaxAnisotropy=function(){return 0},this.clear=function(){_clearBox.empty()===!1&&(_clearBox.intersect(_clipBox),_clearBox.expandByScalar(2),_clearBox.min.x=_clearBox.min.x+_canvasWidthHalf,_clearBox.min.y=-_clearBox.min.y+_canvasHeightHalf,_clearBox.max.x=_clearBox.max.x+_canvasWidthHalf,_clearBox.max.y=-_clearBox.max.y+_canvasHeightHalf,1>_clearAlpha&&_context.clearRect(0|_clearBox.min.x,0|_clearBox.max.y,_clearBox.max.x-_clearBox.min.x|0,_clearBox.min.y-_clearBox.max.y|0),_clearAlpha>0&&(setBlending(THREE.NormalBlending),setOpacity(1),setFillStyle("rgba("+Math.floor(255*_clearColor.r)+","+Math.floor(255*_clearColor.g)+","+Math.floor(255*_clearColor.b)+","+_clearAlpha+")"),_context.fillRect(0|_clearBox.min.x,0|_clearBox.max.y,_clearBox.max.x-_clearBox.min.x|0,_clearBox.min.y-_clearBox.max.y|0)),_clearBox.makeEmpty())},this.clearColor=function(){},this.clearDepth=function(){},this.clearStencil=function(){},this.render=function(scene,camera){if(camera instanceof THREE.Camera==!1)return void console.error("THREE.CanvasRenderer.render: camera is not an instance of THREE.Camera.");this.autoClear===!0&&this.clear(),_this.info.render.vertices=0,_this.info.render.faces=0,_context.setTransform(_viewportWidth/_canvasWidth,0,0,-_viewportHeight/_canvasHeight,_viewportX,_canvasHeight-_viewportY),_context.translate(_canvasWidthHalf,_canvasHeightHalf),_renderData=_projector.projectScene(scene,camera,this.sortObjects,this.sortElements),_elements=_renderData.elements,_lights=_renderData.lights,_camera=camera,_normalViewMatrix.getNormalMatrix(camera.matrixWorldInverse),calculateLights();for(var e=0,el=_elements.length;el>e;e++){var element=_elements[e],material=element.material;if(void 0!==material&&0!==material.opacity){if(_elemBox.makeEmpty(),element instanceof THREE.RenderableSprite)_v1=element,_v1.x*=_canvasWidthHalf,_v1.y*=_canvasHeightHalf,renderSprite(_v1,element,material);else if(element instanceof THREE.RenderableLine)_v1=element.v1,_v2=element.v2,_v1.positionScreen.x*=_canvasWidthHalf,_v1.positionScreen.y*=_canvasHeightHalf,_v2.positionScreen.x*=_canvasWidthHalf,_v2.positionScreen.y*=_canvasHeightHalf,_elemBox.setFromPoints([_v1.positionScreen,_v2.positionScreen]),_clipBox.isIntersectionBox(_elemBox)===!0&&renderLine(_v1,_v2,element,material);else if(element instanceof THREE.RenderableFace){if(_v1=element.v1,_v2=element.v2,_v3=element.v3,_v1.positionScreen.z<-1||_v1.positionScreen.z>1)continue;if(_v2.positionScreen.z<-1||_v2.positionScreen.z>1)continue;if(_v3.positionScreen.z<-1||_v3.positionScreen.z>1)continue;_v1.positionScreen.x*=_canvasWidthHalf,_v1.positionScreen.y*=_canvasHeightHalf,_v2.positionScreen.x*=_canvasWidthHalf,_v2.positionScreen.y*=_canvasHeightHalf,_v3.positionScreen.x*=_canvasWidthHalf,_v3.positionScreen.y*=_canvasHeightHalf,material.overdraw>0&&(expand(_v1.positionScreen,_v2.positionScreen,material.overdraw),expand(_v2.positionScreen,_v3.positionScreen,material.overdraw),expand(_v3.positionScreen,_v1.positionScreen,material.overdraw)),
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement