123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218 |
- THREE.WebGLRenderer2.Mesh = {
-
- createBuffers : function(renderer,geometryGroup,info){
- geometryGroup.__webglVertexBuffer = renderer.createBuffer();
- geometryGroup.__webglNormalBuffer = renderer.createBuffer();
- geometryGroup.__webglTangentBuffer = renderer.createBuffer();
- geometryGroup.__webglColorBuffer = renderer.createBuffer();
- geometryGroup.__webglUVBuffer = renderer.createBuffer();
- geometryGroup.__webglUV2Buffer = renderer.createBuffer();
- geometryGroup.__webglSkinIndicesBuffer = renderer.createBuffer();
- geometryGroup.__webglSkinWeightsBuffer = renderer.createBuffer();
- geometryGroup.__webglFaceBuffer = renderer.createBuffer();
- geometryGroup.__webglLineBuffer = renderer.createBuffer();
- var m, ml;
- if ( geometryGroup.numMorphTargets ) {
- geometryGroup.__webglMorphTargetsBuffers = [];
- for ( m = 0, ml = geometryGroup.numMorphTargets; m < ml; m ++ ) {
- geometryGroup.__webglMorphTargetsBuffers.push( renderer.createBuffer() );
- }
- }
- if ( geometryGroup.numMorphNormals ) {
- geometryGroup.__webglMorphNormalsBuffers = [];
- for ( m = 0, ml = geometryGroup.numMorphNormals; m < ml; m ++ ) {
- geometryGroup.__webglMorphNormalsBuffers.push( renderer.createBuffer() );
- }
- }
- info.memory.geometries ++;
-
- },
-
- initBuffers: function(renderer,geometryGroup, object){
- var geometry = object.geometry,
- faces3 = geometryGroup.faces3,
- faces4 = geometryGroup.faces4,
- nvertices = faces3.length * 3 + faces4.length * 4,
- ntris = faces3.length * 1 + faces4.length * 2,
- nlines = faces3.length * 3 + faces4.length * 4,
- material = getBufferMaterial( object, geometryGroup ),
- uvType = bufferGuessUVType( material ),
- normalType = bufferGuessNormalType( material ),
- vertexColorType = bufferGuessVertexColorType( material );
- //console.log( "uvType", uvType, "normalType", normalType, "vertexColorType", vertexColorType, object, geometryGroup, material );
- geometryGroup.__vertexArray = new Float32Array( nvertices * 3 );
- if ( normalType ) {
- geometryGroup.__normalArray = new Float32Array( nvertices * 3 );
- }
- if ( geometry.hasTangents ) {
- geometryGroup.__tangentArray = new Float32Array( nvertices * 4 );
- }
- if ( vertexColorType ) {
- geometryGroup.__colorArray = new Float32Array( nvertices * 3 );
- }
- if ( uvType ) {
- if ( geometry.faceUvs.length > 0 || geometry.faceVertexUvs.length > 0 ) {
- geometryGroup.__uvArray = new Float32Array( nvertices * 2 );
- }
- if ( geometry.faceUvs.length > 1 || geometry.faceVertexUvs.length > 1 ) {
- geometryGroup.__uv2Array = new Float32Array( nvertices * 2 );
- }
- }
- if ( object.geometry.skinWeights.length && object.geometry.skinIndices.length ) {
- geometryGroup.__skinIndexArray = new Float32Array( nvertices * 4 );
- geometryGroup.__skinWeightArray = new Float32Array( nvertices * 4 );
- }
- geometryGroup.__faceArray = new Uint16Array( ntris * 3 );
- geometryGroup.__lineArray = new Uint16Array( nlines * 2 );
- var m, ml;
- if ( geometryGroup.numMorphTargets ) {
- geometryGroup.__morphTargetsArrays = [];
- for ( m = 0, ml = geometryGroup.numMorphTargets; m < ml; m ++ ) {
- geometryGroup.__morphTargetsArrays.push( new Float32Array( nvertices * 3 ) );
- }
- }
- if ( geometryGroup.numMorphNormals ) {
- geometryGroup.__morphNormalsArrays = [];
- for ( m = 0, ml = geometryGroup.numMorphNormals; m < ml; m ++ ) {
- geometryGroup.__morphNormalsArrays.push( new Float32Array( nvertices * 3 ) );
- }
- }
- geometryGroup.__webglFaceCount = ntris * 3;
- geometryGroup.__webglLineCount = nlines * 2;
- // custom attributes
- if ( material.attributes ) {
- if ( geometryGroup.__webglCustomAttributesList === undefined ) {
- geometryGroup.__webglCustomAttributesList = [];
- }
- for ( var a in material.attributes ) {
- // Do a shallow copy of the attribute object so different geometryGroup chunks use different
- // attribute buffers which are correctly indexed in the setMeshBuffers function
- var originalAttribute = material.attributes[ a ];
- var attribute = {};
- for ( var property in originalAttribute ) {
- attribute[ property ] = originalAttribute[ property ];
- }
- if ( !attribute.__webglInitialized || attribute.createUniqueBuffers ) {
- attribute.__webglInitialized = true;
- var size = 1; // "f" and "i"
- if( attribute.type === "v2" ) size = 2;
- else if( attribute.type === "v3" ) size = 3;
- else if( attribute.type === "v4" ) size = 4;
- else if( attribute.type === "c" ) size = 3;
- attribute.size = size;
- attribute.array = new Float32Array( nvertices * size );
- attribute.buffer = renderer.createBuffer();
- attribute.buffer.belongsToAttribute = a;
- originalAttribute.needsUpdate = true;
- attribute.__original = originalAttribute;
- }
- geometryGroup.__webglCustomAttributesList.push( attribute );
- }
- }
- geometryGroup.__inittedArrays = true;
-
- },
-
- bufferGuessUVType: function( material ) {
- // material must use some texture to require uvs
- if ( material.map || material.lightMap || material.bumpMap || material.normalMap || material.specularMap || material instanceof THREE.ShaderMaterial ) {
- return true;
- }
- return false;
- }
- };
|