|
@@ -1,1616 +1,1618 @@
|
|
|
|
|
|
|
|
+THREE.WebGLRenderer.MeshRenderer = function ( lowlevelrenderer, info ) {
|
|
|
|
|
|
-THREE.WebGLRenderer.MeshRenderer = function(lowlevelrenderer, info){
|
|
|
|
THREE.WebGLRenderer.Object3DRenderer.call( this, lowlevelrenderer, info );
|
|
THREE.WebGLRenderer.Object3DRenderer.call( this, lowlevelrenderer, info );
|
|
-};
|
|
|
|
|
|
|
|
|
|
+};
|
|
|
|
|
|
THREE.WebGLRenderer.MeshRenderer.prototype = Object.create( THREE.WebGLRenderer.Object3DRenderer.prototype );
|
|
THREE.WebGLRenderer.MeshRenderer.prototype = Object.create( THREE.WebGLRenderer.Object3DRenderer.prototype );
|
|
|
|
|
|
-THREE.WebGLRenderer.MeshRenderer.prototype.createBuffers = function( geometryGroup ) {
|
|
|
|
-
|
|
|
|
- var renderer = this.renderer;
|
|
|
|
- geometryGroup.__webglVertexBuffer = renderer.createBuffer();
|
|
|
|
- geometryGroup.__webglNormalBuffer = renderer.createBuffer();
|
|
|
|
- geometryGroup.__webglTangentBuffer = renderer.createBuffer();
|
|
|
|
- geometryGroup.__webglColorBuffer = renderer.createBuffer();
|
|
|
|
- geometryGroup.__webglUVBuffer = renderer.createBuffer();
|
|
|
|
- geometryGroup.__webglUV2Buffer = renderer.createBuffer();
|
|
|
|
|
|
+THREE.extend( THREE.WebGLRenderer.MeshRenderer.prototype, {
|
|
|
|
|
|
- geometryGroup.__webglSkinIndicesBuffer = renderer.createBuffer();
|
|
|
|
- geometryGroup.__webglSkinWeightsBuffer = renderer.createBuffer();
|
|
|
|
|
|
+ createBuffers: function ( geometryGroup ) {
|
|
|
|
|
|
- geometryGroup.__webglFaceBuffer = renderer.createBuffer();
|
|
|
|
- geometryGroup.__webglLineBuffer = renderer.createBuffer();
|
|
|
|
|
|
+ var renderer = this.renderer;
|
|
|
|
+ geometryGroup.__webglVertexBuffer = renderer.createBuffer();
|
|
|
|
+ geometryGroup.__webglNormalBuffer = renderer.createBuffer();
|
|
|
|
+ geometryGroup.__webglTangentBuffer = renderer.createBuffer();
|
|
|
|
+ geometryGroup.__webglColorBuffer = renderer.createBuffer();
|
|
|
|
+ geometryGroup.__webglUVBuffer = renderer.createBuffer();
|
|
|
|
+ geometryGroup.__webglUV2Buffer = renderer.createBuffer();
|
|
|
|
|
|
- var m, ml;
|
|
|
|
|
|
+ geometryGroup.__webglSkinIndicesBuffer = renderer.createBuffer();
|
|
|
|
+ geometryGroup.__webglSkinWeightsBuffer = renderer.createBuffer();
|
|
|
|
|
|
- if ( geometryGroup.numMorphTargets ) {
|
|
|
|
|
|
+ geometryGroup.__webglFaceBuffer = renderer.createBuffer();
|
|
|
|
+ geometryGroup.__webglLineBuffer = renderer.createBuffer();
|
|
|
|
|
|
- geometryGroup.__webglMorphTargetsBuffers = [];
|
|
|
|
|
|
+ var m, ml;
|
|
|
|
|
|
- for ( m = 0, ml = geometryGroup.numMorphTargets; m < ml; m ++ ) {
|
|
|
|
|
|
+ if ( geometryGroup.numMorphTargets ) {
|
|
|
|
|
|
- geometryGroup.__webglMorphTargetsBuffers.push( renderer.createBuffer() );
|
|
|
|
|
|
+ geometryGroup.__webglMorphTargetsBuffers = [];
|
|
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
|
|
+ for ( m = 0, ml = geometryGroup.numMorphTargets; m < ml; m ++ ) {
|
|
|
|
|
|
- if ( geometryGroup.numMorphNormals ) {
|
|
|
|
|
|
+ geometryGroup.__webglMorphTargetsBuffers.push( renderer.createBuffer() );
|
|
|
|
|
|
- geometryGroup.__webglMorphNormalsBuffers = [];
|
|
|
|
-
|
|
|
|
- for ( m = 0, ml = geometryGroup.numMorphNormals; m < ml; m ++ ) {
|
|
|
|
-
|
|
|
|
- geometryGroup.__webglMorphNormalsBuffers.push( renderer.createBuffer() );
|
|
|
|
|
|
+ }
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- this.info.memory.geometries ++;
|
|
|
|
|
|
+ if ( geometryGroup.numMorphNormals ) {
|
|
|
|
|
|
-};
|
|
|
|
-
|
|
|
|
-THREE.WebGLRenderer.MeshRenderer.prototype.initBuffers = function( geometryGroup, object ) {
|
|
|
|
-
|
|
|
|
- var geometry = object.geometry,
|
|
|
|
- faces3 = geometryGroup.faces3,
|
|
|
|
- faces4 = geometryGroup.faces4,
|
|
|
|
|
|
+ geometryGroup.__webglMorphNormalsBuffers = [];
|
|
|
|
|
|
- nvertices = faces3.length * 3 + faces4.length * 4,
|
|
|
|
- ntris = faces3.length * 1 + faces4.length * 2,
|
|
|
|
- nlines = faces3.length * 3 + faces4.length * 4,
|
|
|
|
-
|
|
|
|
- material = this.getBufferMaterial( object, geometryGroup ),
|
|
|
|
-
|
|
|
|
- uvType = this.bufferGuessUVType( material ),
|
|
|
|
- normalType = this.bufferGuessNormalType( material ),
|
|
|
|
- vertexColorType = this.bufferGuessVertexColorType( material );
|
|
|
|
|
|
+ for ( m = 0, ml = geometryGroup.numMorphNormals; m < ml; m ++ ) {
|
|
|
|
|
|
- //console.log( "uvType", uvType, "normalType", normalType, "vertexColorType", vertexColorType, object, geometryGroup, material );
|
|
|
|
|
|
+ geometryGroup.__webglMorphNormalsBuffers.push( renderer.createBuffer() );
|
|
|
|
|
|
- geometryGroup.__vertexArray = new Float32Array( nvertices * 3 );
|
|
|
|
|
|
+ }
|
|
|
|
|
|
- if ( normalType ) {
|
|
|
|
|
|
+ }
|
|
|
|
|
|
- geometryGroup.__normalArray = new Float32Array( nvertices * 3 );
|
|
|
|
|
|
+ this.info.memory.geometries ++;
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ },
|
|
|
|
|
|
- if ( geometry.hasTangents ) {
|
|
|
|
|
|
+ initBuffers: function ( geometryGroup, object ) {
|
|
|
|
|
|
- geometryGroup.__tangentArray = new Float32Array( nvertices * 4 );
|
|
|
|
|
|
+ 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,
|
|
|
|
|
|
- if ( vertexColorType ) {
|
|
|
|
|
|
+ material = this.getBufferMaterial( object, geometryGroup ),
|
|
|
|
|
|
- geometryGroup.__colorArray = new Float32Array( nvertices * 3 );
|
|
|
|
|
|
+ uvType = this.bufferGuessUVType( material ),
|
|
|
|
+ normalType = this.bufferGuessNormalType( material ),
|
|
|
|
+ vertexColorType = this.bufferGuessVertexColorType( material );
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ //console.log( "uvType", uvType, "normalType", normalType, "vertexColorType", vertexColorType, object, geometryGroup, material );
|
|
|
|
|
|
- if ( uvType ) {
|
|
|
|
|
|
+ geometryGroup.__vertexArray = new Float32Array( nvertices * 3 );
|
|
|
|
|
|
- if ( geometry.faceUvs.length > 0 || geometry.faceVertexUvs.length > 0 ) {
|
|
|
|
|
|
+ if ( normalType ) {
|
|
|
|
|
|
- geometryGroup.__uvArray = new Float32Array( nvertices * 2 );
|
|
|
|
|
|
+ geometryGroup.__normalArray = new Float32Array( nvertices * 3 );
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
- if ( geometry.faceUvs.length > 1 || geometry.faceVertexUvs.length > 1 ) {
|
|
|
|
|
|
+ if ( geometry.hasTangents ) {
|
|
|
|
|
|
- geometryGroup.__uv2Array = new Float32Array( nvertices * 2 );
|
|
|
|
|
|
+ geometryGroup.__tangentArray = new Float32Array( nvertices * 4 );
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ if ( vertexColorType ) {
|
|
|
|
|
|
- if ( object.geometry.skinWeights.length && object.geometry.skinIndices.length ) {
|
|
|
|
|
|
+ geometryGroup.__colorArray = new Float32Array( nvertices * 3 );
|
|
|
|
|
|
- geometryGroup.__skinIndexArray = new Float32Array( nvertices * 4 );
|
|
|
|
- geometryGroup.__skinWeightArray = new Float32Array( nvertices * 4 );
|
|
|
|
|
|
+ }
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ if ( uvType ) {
|
|
|
|
|
|
- geometryGroup.__faceArray = new Uint16Array( ntris * 3 );
|
|
|
|
- geometryGroup.__lineArray = new Uint16Array( nlines * 2 );
|
|
|
|
|
|
+ if ( geometry.faceUvs.length > 0 || geometry.faceVertexUvs.length > 0 ) {
|
|
|
|
|
|
- var m, ml;
|
|
|
|
|
|
+ geometryGroup.__uvArray = new Float32Array( nvertices * 2 );
|
|
|
|
|
|
- if ( geometryGroup.numMorphTargets ) {
|
|
|
|
|
|
+ }
|
|
|
|
|
|
- geometryGroup.__morphTargetsArrays = [];
|
|
|
|
|
|
+ if ( geometry.faceUvs.length > 1 || geometry.faceVertexUvs.length > 1 ) {
|
|
|
|
|
|
- for ( m = 0, ml = geometryGroup.numMorphTargets; m < ml; m ++ ) {
|
|
|
|
|
|
+ geometryGroup.__uv2Array = new Float32Array( nvertices * 2 );
|
|
|
|
|
|
- geometryGroup.__morphTargetsArrays.push( new Float32Array( nvertices * 3 ) );
|
|
|
|
|
|
+ }
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ if ( object.geometry.skinWeights.length && object.geometry.skinIndices.length ) {
|
|
|
|
|
|
- if ( geometryGroup.numMorphNormals ) {
|
|
|
|
-
|
|
|
|
- geometryGroup.__morphNormalsArrays = [];
|
|
|
|
-
|
|
|
|
- for ( m = 0, ml = geometryGroup.numMorphNormals; m < ml; m ++ ) {
|
|
|
|
-
|
|
|
|
- geometryGroup.__morphNormalsArrays.push( new Float32Array( nvertices * 3 ) );
|
|
|
|
|
|
+ geometryGroup.__skinIndexArray = new Float32Array( nvertices * 4 );
|
|
|
|
+ geometryGroup.__skinWeightArray = new Float32Array( nvertices * 4 );
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ geometryGroup.__faceArray = new Uint16Array( ntris * 3 );
|
|
|
|
+ geometryGroup.__lineArray = new Uint16Array( nlines * 2 );
|
|
|
|
|
|
- geometryGroup.__webglFaceCount = ntris * 3;
|
|
|
|
- geometryGroup.__webglLineCount = nlines * 2;
|
|
|
|
|
|
+ var m, ml;
|
|
|
|
|
|
|
|
+ if ( geometryGroup.numMorphTargets ) {
|
|
|
|
|
|
- // custom attributes
|
|
|
|
|
|
+ geometryGroup.__morphTargetsArrays = [];
|
|
|
|
|
|
- if ( material.attributes ) {
|
|
|
|
|
|
+ for ( m = 0, ml = geometryGroup.numMorphTargets; m < ml; m ++ ) {
|
|
|
|
|
|
- if ( geometryGroup.__webglCustomAttributesList === undefined ) {
|
|
|
|
|
|
+ geometryGroup.__morphTargetsArrays.push( new Float32Array( nvertices * 3 ) );
|
|
|
|
|
|
- geometryGroup.__webglCustomAttributesList = [];
|
|
|
|
|
|
+ }
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
- for ( var a in material.attributes ) {
|
|
|
|
|
|
+ if ( geometryGroup.numMorphNormals ) {
|
|
|
|
|
|
- // Do a shallow copy of the attribute object so different geometryGroup chunks use different
|
|
|
|
- // attribute buffers which are correctly indexed in the setMeshBuffers function
|
|
|
|
|
|
+ geometryGroup.__morphNormalsArrays = [];
|
|
|
|
|
|
- var originalAttribute = material.attributes[ a ];
|
|
|
|
|
|
+ for ( m = 0, ml = geometryGroup.numMorphNormals; m < ml; m ++ ) {
|
|
|
|
|
|
- var attribute = {};
|
|
|
|
-
|
|
|
|
- for ( var property in originalAttribute ) {
|
|
|
|
-
|
|
|
|
- attribute[ property ] = originalAttribute[ property ];
|
|
|
|
|
|
+ geometryGroup.__morphNormalsArrays.push( new Float32Array( nvertices * 3 ) );
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
- if ( !attribute.__webglInitialized || attribute.createUniqueBuffers ) {
|
|
|
|
-
|
|
|
|
- attribute.__webglInitialized = true;
|
|
|
|
|
|
+ }
|
|
|
|
|
|
- var size = 1; // "f" and "i"
|
|
|
|
|
|
+ geometryGroup.__webglFaceCount = ntris * 3;
|
|
|
|
+ geometryGroup.__webglLineCount = nlines * 2;
|
|
|
|
|
|
- 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;
|
|
|
|
|
|
+ // custom attributes
|
|
|
|
|
|
- attribute.array = new Float32Array( nvertices * size );
|
|
|
|
|
|
+ if ( material.attributes ) {
|
|
|
|
|
|
- attribute.buffer = this.renderer.createBuffer();
|
|
|
|
- attribute.buffer.belongsToAttribute = a;
|
|
|
|
|
|
+ if ( geometryGroup.__webglCustomAttributesList === undefined ) {
|
|
|
|
|
|
- originalAttribute.needsUpdate = true;
|
|
|
|
- attribute.__original = originalAttribute;
|
|
|
|
|
|
+ geometryGroup.__webglCustomAttributesList = [];
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
- geometryGroup.__webglCustomAttributesList.push( attribute );
|
|
|
|
|
|
+ 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 ];
|
|
|
|
|
|
- geometryGroup.__inittedArrays = true;
|
|
|
|
|
|
+ var attribute = {};
|
|
|
|
|
|
-};
|
|
|
|
|
|
+ for ( var property in originalAttribute ) {
|
|
|
|
|
|
|
|
+ attribute[ property ] = originalAttribute[ property ];
|
|
|
|
|
|
|
|
+ }
|
|
|
|
|
|
-THREE.WebGLRenderer.MeshRenderer.prototype.setBuffers = function( geometryGroup, object, dispose, material ) {
|
|
|
|
|
|
+ if ( !attribute.__webglInitialized || attribute.createUniqueBuffers ) {
|
|
|
|
|
|
- if ( ! geometryGroup.__inittedArrays ) {
|
|
|
|
|
|
+ attribute.__webglInitialized = true;
|
|
|
|
|
|
- return;
|
|
|
|
|
|
+ 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;
|
|
|
|
|
|
- var renderer = this.renderer;
|
|
|
|
- var normalType = this.bufferGuessNormalType( material ),
|
|
|
|
- vertexColorType = this.bufferGuessVertexColorType( material ),
|
|
|
|
- uvType = this.bufferGuessUVType( material ),
|
|
|
|
-
|
|
|
|
- needsSmoothNormals = ( normalType === THREE.SmoothShading );
|
|
|
|
-
|
|
|
|
- var f, fl, fi, face,
|
|
|
|
- vertexNormals, faceNormal, normal,
|
|
|
|
- vertexColors, faceColor,
|
|
|
|
- vertexTangents,
|
|
|
|
- uv, uv2, v1, v2, v3, v4, t1, t2, t3, t4, n1, n2, n3, n4,
|
|
|
|
- c1, c2, c3, c4,
|
|
|
|
- sw1, sw2, sw3, sw4,
|
|
|
|
- si1, si2, si3, si4,
|
|
|
|
- sa1, sa2, sa3, sa4,
|
|
|
|
- sb1, sb2, sb3, sb4,
|
|
|
|
- m, ml, i, il,
|
|
|
|
- vn, uvi, uv2i,
|
|
|
|
- vk, vkl, vka,
|
|
|
|
- nka, chf, faceVertexNormals,
|
|
|
|
- a,
|
|
|
|
|
|
+ attribute.size = size;
|
|
|
|
|
|
- vertexIndex = 0,
|
|
|
|
|
|
+ attribute.array = new Float32Array( nvertices * size );
|
|
|
|
|
|
- offset = 0,
|
|
|
|
- offset_uv = 0,
|
|
|
|
- offset_uv2 = 0,
|
|
|
|
- offset_face = 0,
|
|
|
|
- offset_normal = 0,
|
|
|
|
- offset_tangent = 0,
|
|
|
|
- offset_line = 0,
|
|
|
|
- offset_color = 0,
|
|
|
|
- offset_skin = 0,
|
|
|
|
- offset_morphTarget = 0,
|
|
|
|
- offset_custom = 0,
|
|
|
|
- offset_customSrc = 0,
|
|
|
|
|
|
+ attribute.buffer = this.renderer.createBuffer();
|
|
|
|
+ attribute.buffer.belongsToAttribute = a;
|
|
|
|
|
|
- value,
|
|
|
|
|
|
+ originalAttribute.needsUpdate = true;
|
|
|
|
+ attribute.__original = originalAttribute;
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
|
|
- vertexArray = geometryGroup.__vertexArray,
|
|
|
|
- uvArray = geometryGroup.__uvArray,
|
|
|
|
- uv2Array = geometryGroup.__uv2Array,
|
|
|
|
- normalArray = geometryGroup.__normalArray,
|
|
|
|
- tangentArray = geometryGroup.__tangentArray,
|
|
|
|
- colorArray = geometryGroup.__colorArray,
|
|
|
|
|
|
+ geometryGroup.__webglCustomAttributesList.push( attribute );
|
|
|
|
|
|
- skinIndexArray = geometryGroup.__skinIndexArray,
|
|
|
|
- skinWeightArray = geometryGroup.__skinWeightArray,
|
|
|
|
|
|
+ }
|
|
|
|
|
|
- morphTargetsArrays = geometryGroup.__morphTargetsArrays,
|
|
|
|
- morphNormalsArrays = geometryGroup.__morphNormalsArrays,
|
|
|
|
|
|
+ }
|
|
|
|
|
|
- customAttributes = geometryGroup.__webglCustomAttributesList,
|
|
|
|
- customAttribute,
|
|
|
|
|
|
+ geometryGroup.__inittedArrays = true;
|
|
|
|
|
|
- faceArray = geometryGroup.__faceArray,
|
|
|
|
- lineArray = geometryGroup.__lineArray,
|
|
|
|
|
|
+ },
|
|
|
|
|
|
- geometry = object.geometry, // this is shared for all chunks
|
|
|
|
|
|
+ setBuffers: function ( geometryGroup, object, dispose, material ) {
|
|
|
|
|
|
- dirtyVertices = geometry.verticesNeedUpdate,
|
|
|
|
- dirtyElements = geometry.elementsNeedUpdate,
|
|
|
|
- dirtyUvs = geometry.uvsNeedUpdate,
|
|
|
|
- dirtyNormals = geometry.normalsNeedUpdate,
|
|
|
|
- dirtyTangents = geometry.tangentsNeedUpdate,
|
|
|
|
- dirtyColors = geometry.colorsNeedUpdate,
|
|
|
|
- dirtyMorphTargets = geometry.morphTargetsNeedUpdate,
|
|
|
|
|
|
+ if ( ! geometryGroup.__inittedArrays ) {
|
|
|
|
|
|
- vertices = geometry.vertices,
|
|
|
|
- chunk_faces3 = geometryGroup.faces3,
|
|
|
|
- chunk_faces4 = geometryGroup.faces4,
|
|
|
|
- obj_faces = geometry.faces,
|
|
|
|
|
|
+ return;
|
|
|
|
|
|
- obj_uvs = geometry.faceVertexUvs[ 0 ],
|
|
|
|
- obj_uvs2 = geometry.faceVertexUvs[ 1 ],
|
|
|
|
|
|
+ }
|
|
|
|
|
|
- obj_colors = geometry.colors,
|
|
|
|
|
|
+ var renderer = this.renderer;
|
|
|
|
+ var normalType = this.bufferGuessNormalType( material ),
|
|
|
|
+ vertexColorType = this.bufferGuessVertexColorType( material ),
|
|
|
|
+ uvType = this.bufferGuessUVType( material ),
|
|
|
|
|
|
- obj_skinIndices = geometry.skinIndices,
|
|
|
|
- obj_skinWeights = geometry.skinWeights,
|
|
|
|
|
|
+ needsSmoothNormals = ( normalType === THREE.SmoothShading );
|
|
|
|
+
|
|
|
|
+ var f, fl, fi, face,
|
|
|
|
+ vertexNormals, faceNormal, normal,
|
|
|
|
+ vertexColors, faceColor,
|
|
|
|
+ vertexTangents,
|
|
|
|
+ uv, uv2, v1, v2, v3, v4, t1, t2, t3, t4, n1, n2, n3, n4,
|
|
|
|
+ c1, c2, c3, c4,
|
|
|
|
+ sw1, sw2, sw3, sw4,
|
|
|
|
+ si1, si2, si3, si4,
|
|
|
|
+ sa1, sa2, sa3, sa4,
|
|
|
|
+ sb1, sb2, sb3, sb4,
|
|
|
|
+ m, ml, i, il,
|
|
|
|
+ vn, uvi, uv2i,
|
|
|
|
+ vk, vkl, vka,
|
|
|
|
+ nka, chf, faceVertexNormals,
|
|
|
|
+ a,
|
|
|
|
+
|
|
|
|
+ vertexIndex = 0,
|
|
|
|
+
|
|
|
|
+ offset = 0,
|
|
|
|
+ offset_uv = 0,
|
|
|
|
+ offset_uv2 = 0,
|
|
|
|
+ offset_face = 0,
|
|
|
|
+ offset_normal = 0,
|
|
|
|
+ offset_tangent = 0,
|
|
|
|
+ offset_line = 0,
|
|
|
|
+ offset_color = 0,
|
|
|
|
+ offset_skin = 0,
|
|
|
|
+ offset_morphTarget = 0,
|
|
|
|
+ offset_custom = 0,
|
|
|
|
+ offset_customSrc = 0,
|
|
|
|
+
|
|
|
|
+ value,
|
|
|
|
+
|
|
|
|
+ vertexArray = geometryGroup.__vertexArray,
|
|
|
|
+ uvArray = geometryGroup.__uvArray,
|
|
|
|
+ uv2Array = geometryGroup.__uv2Array,
|
|
|
|
+ normalArray = geometryGroup.__normalArray,
|
|
|
|
+ tangentArray = geometryGroup.__tangentArray,
|
|
|
|
+ colorArray = geometryGroup.__colorArray,
|
|
|
|
+
|
|
|
|
+ skinIndexArray = geometryGroup.__skinIndexArray,
|
|
|
|
+ skinWeightArray = geometryGroup.__skinWeightArray,
|
|
|
|
+
|
|
|
|
+ morphTargetsArrays = geometryGroup.__morphTargetsArrays,
|
|
|
|
+ morphNormalsArrays = geometryGroup.__morphNormalsArrays,
|
|
|
|
+
|
|
|
|
+ customAttributes = geometryGroup.__webglCustomAttributesList,
|
|
|
|
+ customAttribute,
|
|
|
|
+
|
|
|
|
+ faceArray = geometryGroup.__faceArray,
|
|
|
|
+ lineArray = geometryGroup.__lineArray,
|
|
|
|
+
|
|
|
|
+ geometry = object.geometry, // this is shared for all chunks
|
|
|
|
+
|
|
|
|
+ dirtyVertices = geometry.verticesNeedUpdate,
|
|
|
|
+ dirtyElements = geometry.elementsNeedUpdate,
|
|
|
|
+ dirtyUvs = geometry.uvsNeedUpdate,
|
|
|
|
+ dirtyNormals = geometry.normalsNeedUpdate,
|
|
|
|
+ dirtyTangents = geometry.tangentsNeedUpdate,
|
|
|
|
+ dirtyColors = geometry.colorsNeedUpdate,
|
|
|
|
+ dirtyMorphTargets = geometry.morphTargetsNeedUpdate,
|
|
|
|
+
|
|
|
|
+ vertices = geometry.vertices,
|
|
|
|
+ chunk_faces3 = geometryGroup.faces3,
|
|
|
|
+ chunk_faces4 = geometryGroup.faces4,
|
|
|
|
+ obj_faces = geometry.faces,
|
|
|
|
+
|
|
|
|
+ obj_uvs = geometry.faceVertexUvs[ 0 ],
|
|
|
|
+ obj_uvs2 = geometry.faceVertexUvs[ 1 ],
|
|
|
|
+
|
|
|
|
+ obj_colors = geometry.colors,
|
|
|
|
+
|
|
|
|
+ obj_skinIndices = geometry.skinIndices,
|
|
|
|
+ obj_skinWeights = geometry.skinWeights,
|
|
|
|
+
|
|
|
|
+ morphTargets = geometry.morphTargets,
|
|
|
|
+ morphNormals = geometry.morphNormals;
|
|
|
|
+
|
|
|
|
+ if ( dirtyVertices ) {
|
|
|
|
|
|
- morphTargets = geometry.morphTargets,
|
|
|
|
- morphNormals = geometry.morphNormals;
|
|
|
|
|
|
+ for ( f = 0, fl = chunk_faces3.length; f < fl; f ++ ) {
|
|
|
|
|
|
- if ( dirtyVertices ) {
|
|
|
|
|
|
+ face = obj_faces[ chunk_faces3[ f ] ];
|
|
|
|
|
|
- for ( f = 0, fl = chunk_faces3.length; f < fl; f ++ ) {
|
|
|
|
|
|
+ v1 = vertices[ face.a ];
|
|
|
|
+ v2 = vertices[ face.b ];
|
|
|
|
+ v3 = vertices[ face.c ];
|
|
|
|
|
|
- face = obj_faces[ chunk_faces3[ f ] ];
|
|
|
|
|
|
+ vertexArray[ offset ] = v1.x;
|
|
|
|
+ vertexArray[ offset + 1 ] = v1.y;
|
|
|
|
+ vertexArray[ offset + 2 ] = v1.z;
|
|
|
|
|
|
- v1 = vertices[ face.a ];
|
|
|
|
- v2 = vertices[ face.b ];
|
|
|
|
- v3 = vertices[ face.c ];
|
|
|
|
|
|
+ vertexArray[ offset + 3 ] = v2.x;
|
|
|
|
+ vertexArray[ offset + 4 ] = v2.y;
|
|
|
|
+ vertexArray[ offset + 5 ] = v2.z;
|
|
|
|
|
|
- vertexArray[ offset ] = v1.x;
|
|
|
|
- vertexArray[ offset + 1 ] = v1.y;
|
|
|
|
- vertexArray[ offset + 2 ] = v1.z;
|
|
|
|
|
|
+ vertexArray[ offset + 6 ] = v3.x;
|
|
|
|
+ vertexArray[ offset + 7 ] = v3.y;
|
|
|
|
+ vertexArray[ offset + 8 ] = v3.z;
|
|
|
|
|
|
- vertexArray[ offset + 3 ] = v2.x;
|
|
|
|
- vertexArray[ offset + 4 ] = v2.y;
|
|
|
|
- vertexArray[ offset + 5 ] = v2.z;
|
|
|
|
|
|
+ offset += 9;
|
|
|
|
|
|
- vertexArray[ offset + 6 ] = v3.x;
|
|
|
|
- vertexArray[ offset + 7 ] = v3.y;
|
|
|
|
- vertexArray[ offset + 8 ] = v3.z;
|
|
|
|
|
|
+ }
|
|
|
|
|
|
- offset += 9;
|
|
|
|
|
|
+ for ( f = 0, fl = chunk_faces4.length; f < fl; f ++ ) {
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ face = obj_faces[ chunk_faces4[ f ] ];
|
|
|
|
|
|
- for ( f = 0, fl = chunk_faces4.length; f < fl; f ++ ) {
|
|
|
|
|
|
+ v1 = vertices[ face.a ];
|
|
|
|
+ v2 = vertices[ face.b ];
|
|
|
|
+ v3 = vertices[ face.c ];
|
|
|
|
+ v4 = vertices[ face.d ];
|
|
|
|
|
|
- face = obj_faces[ chunk_faces4[ f ] ];
|
|
|
|
|
|
+ vertexArray[ offset ] = v1.x;
|
|
|
|
+ vertexArray[ offset + 1 ] = v1.y;
|
|
|
|
+ vertexArray[ offset + 2 ] = v1.z;
|
|
|
|
|
|
- v1 = vertices[ face.a ];
|
|
|
|
- v2 = vertices[ face.b ];
|
|
|
|
- v3 = vertices[ face.c ];
|
|
|
|
- v4 = vertices[ face.d ];
|
|
|
|
|
|
+ vertexArray[ offset + 3 ] = v2.x;
|
|
|
|
+ vertexArray[ offset + 4 ] = v2.y;
|
|
|
|
+ vertexArray[ offset + 5 ] = v2.z;
|
|
|
|
|
|
- vertexArray[ offset ] = v1.x;
|
|
|
|
- vertexArray[ offset + 1 ] = v1.y;
|
|
|
|
- vertexArray[ offset + 2 ] = v1.z;
|
|
|
|
|
|
+ vertexArray[ offset + 6 ] = v3.x;
|
|
|
|
+ vertexArray[ offset + 7 ] = v3.y;
|
|
|
|
+ vertexArray[ offset + 8 ] = v3.z;
|
|
|
|
|
|
- vertexArray[ offset + 3 ] = v2.x;
|
|
|
|
- vertexArray[ offset + 4 ] = v2.y;
|
|
|
|
- vertexArray[ offset + 5 ] = v2.z;
|
|
|
|
|
|
+ vertexArray[ offset + 9 ] = v4.x;
|
|
|
|
+ vertexArray[ offset + 10 ] = v4.y;
|
|
|
|
+ vertexArray[ offset + 11 ] = v4.z;
|
|
|
|
|
|
- vertexArray[ offset + 6 ] = v3.x;
|
|
|
|
- vertexArray[ offset + 7 ] = v3.y;
|
|
|
|
- vertexArray[ offset + 8 ] = v3.z;
|
|
|
|
|
|
+ offset += 12;
|
|
|
|
|
|
- vertexArray[ offset + 9 ] = v4.x;
|
|
|
|
- vertexArray[ offset + 10 ] = v4.y;
|
|
|
|
- vertexArray[ offset + 11 ] = v4.z;
|
|
|
|
|
|
+ }
|
|
|
|
|
|
- offset += 12;
|
|
|
|
|
|
+ renderer.setDynamicArrayBuffer( geometryGroup.__webglVertexBuffer, vertexArray);
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
- renderer.setDynamicArrayBuffer( geometryGroup.__webglVertexBuffer, vertexArray);
|
|
|
|
|
|
+ if ( dirtyMorphTargets ) {
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ for ( vk = 0, vkl = morphTargets.length; vk < vkl; vk ++ ) {
|
|
|
|
|
|
- if ( dirtyMorphTargets ) {
|
|
|
|
|
|
+ offset_morphTarget = 0;
|
|
|
|
|
|
- for ( vk = 0, vkl = morphTargets.length; vk < vkl; vk ++ ) {
|
|
|
|
|
|
+ for ( f = 0, fl = chunk_faces3.length; f < fl; f ++ ) {
|
|
|
|
|
|
- offset_morphTarget = 0;
|
|
|
|
|
|
+ chf = chunk_faces3[ f ];
|
|
|
|
+ face = obj_faces[ chf ];
|
|
|
|
|
|
- for ( f = 0, fl = chunk_faces3.length; f < fl; f ++ ) {
|
|
|
|
|
|
+ // morph positions
|
|
|
|
|
|
- chf = chunk_faces3[ f ];
|
|
|
|
- face = obj_faces[ chf ];
|
|
|
|
|
|
+ v1 = morphTargets[ vk ].vertices[ face.a ];
|
|
|
|
+ v2 = morphTargets[ vk ].vertices[ face.b ];
|
|
|
|
+ v3 = morphTargets[ vk ].vertices[ face.c ];
|
|
|
|
|
|
- // morph positions
|
|
|
|
|
|
+ vka = morphTargetsArrays[ vk ];
|
|
|
|
|
|
- v1 = morphTargets[ vk ].vertices[ face.a ];
|
|
|
|
- v2 = morphTargets[ vk ].vertices[ face.b ];
|
|
|
|
- v3 = morphTargets[ vk ].vertices[ face.c ];
|
|
|
|
|
|
+ vka[ offset_morphTarget ] = v1.x;
|
|
|
|
+ vka[ offset_morphTarget + 1 ] = v1.y;
|
|
|
|
+ vka[ offset_morphTarget + 2 ] = v1.z;
|
|
|
|
|
|
- vka = morphTargetsArrays[ vk ];
|
|
|
|
|
|
+ vka[ offset_morphTarget + 3 ] = v2.x;
|
|
|
|
+ vka[ offset_morphTarget + 4 ] = v2.y;
|
|
|
|
+ vka[ offset_morphTarget + 5 ] = v2.z;
|
|
|
|
|
|
- vka[ offset_morphTarget ] = v1.x;
|
|
|
|
- vka[ offset_morphTarget + 1 ] = v1.y;
|
|
|
|
- vka[ offset_morphTarget + 2 ] = v1.z;
|
|
|
|
|
|
+ vka[ offset_morphTarget + 6 ] = v3.x;
|
|
|
|
+ vka[ offset_morphTarget + 7 ] = v3.y;
|
|
|
|
+ vka[ offset_morphTarget + 8 ] = v3.z;
|
|
|
|
|
|
- vka[ offset_morphTarget + 3 ] = v2.x;
|
|
|
|
- vka[ offset_morphTarget + 4 ] = v2.y;
|
|
|
|
- vka[ offset_morphTarget + 5 ] = v2.z;
|
|
|
|
|
|
+ // morph normals
|
|
|
|
|
|
- vka[ offset_morphTarget + 6 ] = v3.x;
|
|
|
|
- vka[ offset_morphTarget + 7 ] = v3.y;
|
|
|
|
- vka[ offset_morphTarget + 8 ] = v3.z;
|
|
|
|
|
|
+ if ( material.morphNormals ) {
|
|
|
|
|
|
- // morph normals
|
|
|
|
|
|
+ if ( needsSmoothNormals ) {
|
|
|
|
|
|
- if ( material.morphNormals ) {
|
|
|
|
|
|
+ faceVertexNormals = morphNormals[ vk ].vertexNormals[ chf ];
|
|
|
|
|
|
- if ( needsSmoothNormals ) {
|
|
|
|
|
|
+ n1 = faceVertexNormals.a;
|
|
|
|
+ n2 = faceVertexNormals.b;
|
|
|
|
+ n3 = faceVertexNormals.c;
|
|
|
|
|
|
- faceVertexNormals = morphNormals[ vk ].vertexNormals[ chf ];
|
|
|
|
|
|
+ } else {
|
|
|
|
|
|
- n1 = faceVertexNormals.a;
|
|
|
|
- n2 = faceVertexNormals.b;
|
|
|
|
- n3 = faceVertexNormals.c;
|
|
|
|
|
|
+ n1 = morphNormals[ vk ].faceNormals[ chf ];
|
|
|
|
+ n2 = n1;
|
|
|
|
+ n3 = n1;
|
|
|
|
|
|
- } else {
|
|
|
|
|
|
+ }
|
|
|
|
|
|
- n1 = morphNormals[ vk ].faceNormals[ chf ];
|
|
|
|
- n2 = n1;
|
|
|
|
- n3 = n1;
|
|
|
|
|
|
+ nka = morphNormalsArrays[ vk ];
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ nka[ offset_morphTarget ] = n1.x;
|
|
|
|
+ nka[ offset_morphTarget + 1 ] = n1.y;
|
|
|
|
+ nka[ offset_morphTarget + 2 ] = n1.z;
|
|
|
|
|
|
- nka = morphNormalsArrays[ vk ];
|
|
|
|
|
|
+ nka[ offset_morphTarget + 3 ] = n2.x;
|
|
|
|
+ nka[ offset_morphTarget + 4 ] = n2.y;
|
|
|
|
+ nka[ offset_morphTarget + 5 ] = n2.z;
|
|
|
|
|
|
- nka[ offset_morphTarget ] = n1.x;
|
|
|
|
- nka[ offset_morphTarget + 1 ] = n1.y;
|
|
|
|
- nka[ offset_morphTarget + 2 ] = n1.z;
|
|
|
|
|
|
+ nka[ offset_morphTarget + 6 ] = n3.x;
|
|
|
|
+ nka[ offset_morphTarget + 7 ] = n3.y;
|
|
|
|
+ nka[ offset_morphTarget + 8 ] = n3.z;
|
|
|
|
|
|
- nka[ offset_morphTarget + 3 ] = n2.x;
|
|
|
|
- nka[ offset_morphTarget + 4 ] = n2.y;
|
|
|
|
- nka[ offset_morphTarget + 5 ] = n2.z;
|
|
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ //
|
|
|
|
|
|
- nka[ offset_morphTarget + 6 ] = n3.x;
|
|
|
|
- nka[ offset_morphTarget + 7 ] = n3.y;
|
|
|
|
- nka[ offset_morphTarget + 8 ] = n3.z;
|
|
|
|
|
|
+ offset_morphTarget += 9;
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
- //
|
|
|
|
|
|
+ for ( f = 0, fl = chunk_faces4.length; f < fl; f ++ ) {
|
|
|
|
|
|
- offset_morphTarget += 9;
|
|
|
|
|
|
+ chf = chunk_faces4[ f ];
|
|
|
|
+ face = obj_faces[ chf ];
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ // morph positions
|
|
|
|
|
|
- for ( f = 0, fl = chunk_faces4.length; f < fl; f ++ ) {
|
|
|
|
|
|
+ v1 = morphTargets[ vk ].vertices[ face.a ];
|
|
|
|
+ v2 = morphTargets[ vk ].vertices[ face.b ];
|
|
|
|
+ v3 = morphTargets[ vk ].vertices[ face.c ];
|
|
|
|
+ v4 = morphTargets[ vk ].vertices[ face.d ];
|
|
|
|
|
|
- chf = chunk_faces4[ f ];
|
|
|
|
- face = obj_faces[ chf ];
|
|
|
|
|
|
+ vka = morphTargetsArrays[ vk ];
|
|
|
|
|
|
- // morph positions
|
|
|
|
|
|
+ vka[ offset_morphTarget ] = v1.x;
|
|
|
|
+ vka[ offset_morphTarget + 1 ] = v1.y;
|
|
|
|
+ vka[ offset_morphTarget + 2 ] = v1.z;
|
|
|
|
|
|
- v1 = morphTargets[ vk ].vertices[ face.a ];
|
|
|
|
- v2 = morphTargets[ vk ].vertices[ face.b ];
|
|
|
|
- v3 = morphTargets[ vk ].vertices[ face.c ];
|
|
|
|
- v4 = morphTargets[ vk ].vertices[ face.d ];
|
|
|
|
|
|
+ vka[ offset_morphTarget + 3 ] = v2.x;
|
|
|
|
+ vka[ offset_morphTarget + 4 ] = v2.y;
|
|
|
|
+ vka[ offset_morphTarget + 5 ] = v2.z;
|
|
|
|
|
|
- vka = morphTargetsArrays[ vk ];
|
|
|
|
|
|
+ vka[ offset_morphTarget + 6 ] = v3.x;
|
|
|
|
+ vka[ offset_morphTarget + 7 ] = v3.y;
|
|
|
|
+ vka[ offset_morphTarget + 8 ] = v3.z;
|
|
|
|
|
|
- vka[ offset_morphTarget ] = v1.x;
|
|
|
|
- vka[ offset_morphTarget + 1 ] = v1.y;
|
|
|
|
- vka[ offset_morphTarget + 2 ] = v1.z;
|
|
|
|
|
|
+ vka[ offset_morphTarget + 9 ] = v4.x;
|
|
|
|
+ vka[ offset_morphTarget + 10 ] = v4.y;
|
|
|
|
+ vka[ offset_morphTarget + 11 ] = v4.z;
|
|
|
|
|
|
- vka[ offset_morphTarget + 3 ] = v2.x;
|
|
|
|
- vka[ offset_morphTarget + 4 ] = v2.y;
|
|
|
|
- vka[ offset_morphTarget + 5 ] = v2.z;
|
|
|
|
|
|
+ // morph normals
|
|
|
|
|
|
- vka[ offset_morphTarget + 6 ] = v3.x;
|
|
|
|
- vka[ offset_morphTarget + 7 ] = v3.y;
|
|
|
|
- vka[ offset_morphTarget + 8 ] = v3.z;
|
|
|
|
|
|
+ if ( material.morphNormals ) {
|
|
|
|
|
|
- vka[ offset_morphTarget + 9 ] = v4.x;
|
|
|
|
- vka[ offset_morphTarget + 10 ] = v4.y;
|
|
|
|
- vka[ offset_morphTarget + 11 ] = v4.z;
|
|
|
|
|
|
+ if ( needsSmoothNormals ) {
|
|
|
|
|
|
- // morph normals
|
|
|
|
|
|
+ faceVertexNormals = morphNormals[ vk ].vertexNormals[ chf ];
|
|
|
|
|
|
- if ( material.morphNormals ) {
|
|
|
|
|
|
+ n1 = faceVertexNormals.a;
|
|
|
|
+ n2 = faceVertexNormals.b;
|
|
|
|
+ n3 = faceVertexNormals.c;
|
|
|
|
+ n4 = faceVertexNormals.d;
|
|
|
|
|
|
- if ( needsSmoothNormals ) {
|
|
|
|
|
|
+ } else {
|
|
|
|
|
|
- faceVertexNormals = morphNormals[ vk ].vertexNormals[ chf ];
|
|
|
|
|
|
+ n1 = morphNormals[ vk ].faceNormals[ chf ];
|
|
|
|
+ n2 = n1;
|
|
|
|
+ n3 = n1;
|
|
|
|
+ n4 = n1;
|
|
|
|
|
|
- n1 = faceVertexNormals.a;
|
|
|
|
- n2 = faceVertexNormals.b;
|
|
|
|
- n3 = faceVertexNormals.c;
|
|
|
|
- n4 = faceVertexNormals.d;
|
|
|
|
|
|
+ }
|
|
|
|
|
|
- } else {
|
|
|
|
|
|
+ nka = morphNormalsArrays[ vk ];
|
|
|
|
|
|
- n1 = morphNormals[ vk ].faceNormals[ chf ];
|
|
|
|
- n2 = n1;
|
|
|
|
- n3 = n1;
|
|
|
|
- n4 = n1;
|
|
|
|
|
|
+ nka[ offset_morphTarget ] = n1.x;
|
|
|
|
+ nka[ offset_morphTarget + 1 ] = n1.y;
|
|
|
|
+ nka[ offset_morphTarget + 2 ] = n1.z;
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ nka[ offset_morphTarget + 3 ] = n2.x;
|
|
|
|
+ nka[ offset_morphTarget + 4 ] = n2.y;
|
|
|
|
+ nka[ offset_morphTarget + 5 ] = n2.z;
|
|
|
|
|
|
- nka = morphNormalsArrays[ vk ];
|
|
|
|
|
|
+ nka[ offset_morphTarget + 6 ] = n3.x;
|
|
|
|
+ nka[ offset_morphTarget + 7 ] = n3.y;
|
|
|
|
+ nka[ offset_morphTarget + 8 ] = n3.z;
|
|
|
|
|
|
- nka[ offset_morphTarget ] = n1.x;
|
|
|
|
- nka[ offset_morphTarget + 1 ] = n1.y;
|
|
|
|
- nka[ offset_morphTarget + 2 ] = n1.z;
|
|
|
|
|
|
+ nka[ offset_morphTarget + 9 ] = n4.x;
|
|
|
|
+ nka[ offset_morphTarget + 10 ] = n4.y;
|
|
|
|
+ nka[ offset_morphTarget + 11 ] = n4.z;
|
|
|
|
|
|
- nka[ offset_morphTarget + 3 ] = n2.x;
|
|
|
|
- nka[ offset_morphTarget + 4 ] = n2.y;
|
|
|
|
- nka[ offset_morphTarget + 5 ] = n2.z;
|
|
|
|
|
|
+ }
|
|
|
|
|
|
- nka[ offset_morphTarget + 6 ] = n3.x;
|
|
|
|
- nka[ offset_morphTarget + 7 ] = n3.y;
|
|
|
|
- nka[ offset_morphTarget + 8 ] = n3.z;
|
|
|
|
|
|
+ //
|
|
|
|
|
|
- nka[ offset_morphTarget + 9 ] = n4.x;
|
|
|
|
- nka[ offset_morphTarget + 10 ] = n4.y;
|
|
|
|
- nka[ offset_morphTarget + 11 ] = n4.z;
|
|
|
|
|
|
+ offset_morphTarget += 12;
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
- //
|
|
|
|
|
|
+ this.renderer.setDynamicArrayBuffer( geometryGroup.__webglMorphTargetsBuffers[ vk ], morphTargetsArrays[ vk ]);
|
|
|
|
|
|
- offset_morphTarget += 12;
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- this.renderer.setDynamicArrayBuffer( geometryGroup.__webglMorphTargetsBuffers[ vk ], morphTargetsArrays[ vk ]);
|
|
|
|
|
|
+ if ( material.morphNormals ) {
|
|
|
|
|
|
- if ( material.morphNormals ) {
|
|
|
|
|
|
+ this.renderer.setDynamicArrayBuffer( geometryGroup.__webglMorphNormalsBuffers[ vk ], morphNormalsArrays[ vk ]);
|
|
|
|
|
|
- this.renderer.setDynamicArrayBuffer( geometryGroup.__webglMorphNormalsBuffers[ vk ], morphNormalsArrays[ vk ]);
|
|
|
|
|
|
+ }
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ if ( obj_skinWeights.length ) {
|
|
|
|
|
|
- if ( obj_skinWeights.length ) {
|
|
|
|
|
|
+ for ( f = 0, fl = chunk_faces3.length; f < fl; f ++ ) {
|
|
|
|
|
|
- for ( f = 0, fl = chunk_faces3.length; f < fl; f ++ ) {
|
|
|
|
|
|
+ face = obj_faces[ chunk_faces3[ f ] ];
|
|
|
|
|
|
- face = obj_faces[ chunk_faces3[ f ] ];
|
|
|
|
|
|
+ // weights
|
|
|
|
|
|
- // weights
|
|
|
|
|
|
+ sw1 = obj_skinWeights[ face.a ];
|
|
|
|
+ sw2 = obj_skinWeights[ face.b ];
|
|
|
|
+ sw3 = obj_skinWeights[ face.c ];
|
|
|
|
|
|
- sw1 = obj_skinWeights[ face.a ];
|
|
|
|
- sw2 = obj_skinWeights[ face.b ];
|
|
|
|
- sw3 = obj_skinWeights[ face.c ];
|
|
|
|
|
|
+ skinWeightArray[ offset_skin ] = sw1.x;
|
|
|
|
+ skinWeightArray[ offset_skin + 1 ] = sw1.y;
|
|
|
|
+ skinWeightArray[ offset_skin + 2 ] = sw1.z;
|
|
|
|
+ skinWeightArray[ offset_skin + 3 ] = sw1.w;
|
|
|
|
|
|
- skinWeightArray[ offset_skin ] = sw1.x;
|
|
|
|
- skinWeightArray[ offset_skin + 1 ] = sw1.y;
|
|
|
|
- skinWeightArray[ offset_skin + 2 ] = sw1.z;
|
|
|
|
- skinWeightArray[ offset_skin + 3 ] = sw1.w;
|
|
|
|
|
|
+ skinWeightArray[ offset_skin + 4 ] = sw2.x;
|
|
|
|
+ skinWeightArray[ offset_skin + 5 ] = sw2.y;
|
|
|
|
+ skinWeightArray[ offset_skin + 6 ] = sw2.z;
|
|
|
|
+ skinWeightArray[ offset_skin + 7 ] = sw2.w;
|
|
|
|
|
|
- skinWeightArray[ offset_skin + 4 ] = sw2.x;
|
|
|
|
- skinWeightArray[ offset_skin + 5 ] = sw2.y;
|
|
|
|
- skinWeightArray[ offset_skin + 6 ] = sw2.z;
|
|
|
|
- skinWeightArray[ offset_skin + 7 ] = sw2.w;
|
|
|
|
|
|
+ skinWeightArray[ offset_skin + 8 ] = sw3.x;
|
|
|
|
+ skinWeightArray[ offset_skin + 9 ] = sw3.y;
|
|
|
|
+ skinWeightArray[ offset_skin + 10 ] = sw3.z;
|
|
|
|
+ skinWeightArray[ offset_skin + 11 ] = sw3.w;
|
|
|
|
|
|
- skinWeightArray[ offset_skin + 8 ] = sw3.x;
|
|
|
|
- skinWeightArray[ offset_skin + 9 ] = sw3.y;
|
|
|
|
- skinWeightArray[ offset_skin + 10 ] = sw3.z;
|
|
|
|
- skinWeightArray[ offset_skin + 11 ] = sw3.w;
|
|
|
|
|
|
+ // indices
|
|
|
|
|
|
- // indices
|
|
|
|
|
|
+ si1 = obj_skinIndices[ face.a ];
|
|
|
|
+ si2 = obj_skinIndices[ face.b ];
|
|
|
|
+ si3 = obj_skinIndices[ face.c ];
|
|
|
|
|
|
- si1 = obj_skinIndices[ face.a ];
|
|
|
|
- si2 = obj_skinIndices[ face.b ];
|
|
|
|
- si3 = obj_skinIndices[ face.c ];
|
|
|
|
|
|
+ skinIndexArray[ offset_skin ] = si1.x;
|
|
|
|
+ skinIndexArray[ offset_skin + 1 ] = si1.y;
|
|
|
|
+ skinIndexArray[ offset_skin + 2 ] = si1.z;
|
|
|
|
+ skinIndexArray[ offset_skin + 3 ] = si1.w;
|
|
|
|
|
|
- skinIndexArray[ offset_skin ] = si1.x;
|
|
|
|
- skinIndexArray[ offset_skin + 1 ] = si1.y;
|
|
|
|
- skinIndexArray[ offset_skin + 2 ] = si1.z;
|
|
|
|
- skinIndexArray[ offset_skin + 3 ] = si1.w;
|
|
|
|
|
|
+ skinIndexArray[ offset_skin + 4 ] = si2.x;
|
|
|
|
+ skinIndexArray[ offset_skin + 5 ] = si2.y;
|
|
|
|
+ skinIndexArray[ offset_skin + 6 ] = si2.z;
|
|
|
|
+ skinIndexArray[ offset_skin + 7 ] = si2.w;
|
|
|
|
|
|
- skinIndexArray[ offset_skin + 4 ] = si2.x;
|
|
|
|
- skinIndexArray[ offset_skin + 5 ] = si2.y;
|
|
|
|
- skinIndexArray[ offset_skin + 6 ] = si2.z;
|
|
|
|
- skinIndexArray[ offset_skin + 7 ] = si2.w;
|
|
|
|
|
|
+ skinIndexArray[ offset_skin + 8 ] = si3.x;
|
|
|
|
+ skinIndexArray[ offset_skin + 9 ] = si3.y;
|
|
|
|
+ skinIndexArray[ offset_skin + 10 ] = si3.z;
|
|
|
|
+ skinIndexArray[ offset_skin + 11 ] = si3.w;
|
|
|
|
|
|
- skinIndexArray[ offset_skin + 8 ] = si3.x;
|
|
|
|
- skinIndexArray[ offset_skin + 9 ] = si3.y;
|
|
|
|
- skinIndexArray[ offset_skin + 10 ] = si3.z;
|
|
|
|
- skinIndexArray[ offset_skin + 11 ] = si3.w;
|
|
|
|
|
|
+ offset_skin += 12;
|
|
|
|
|
|
- offset_skin += 12;
|
|
|
|
|
|
+ }
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ for ( f = 0, fl = chunk_faces4.length; f < fl; f ++ ) {
|
|
|
|
|
|
- for ( f = 0, fl = chunk_faces4.length; f < fl; f ++ ) {
|
|
|
|
|
|
+ face = obj_faces[ chunk_faces4[ f ] ];
|
|
|
|
|
|
- face = obj_faces[ chunk_faces4[ f ] ];
|
|
|
|
|
|
+ // weights
|
|
|
|
|
|
- // weights
|
|
|
|
|
|
+ sw1 = obj_skinWeights[ face.a ];
|
|
|
|
+ sw2 = obj_skinWeights[ face.b ];
|
|
|
|
+ sw3 = obj_skinWeights[ face.c ];
|
|
|
|
+ sw4 = obj_skinWeights[ face.d ];
|
|
|
|
|
|
- sw1 = obj_skinWeights[ face.a ];
|
|
|
|
- sw2 = obj_skinWeights[ face.b ];
|
|
|
|
- sw3 = obj_skinWeights[ face.c ];
|
|
|
|
- sw4 = obj_skinWeights[ face.d ];
|
|
|
|
|
|
+ skinWeightArray[ offset_skin ] = sw1.x;
|
|
|
|
+ skinWeightArray[ offset_skin + 1 ] = sw1.y;
|
|
|
|
+ skinWeightArray[ offset_skin + 2 ] = sw1.z;
|
|
|
|
+ skinWeightArray[ offset_skin + 3 ] = sw1.w;
|
|
|
|
|
|
- skinWeightArray[ offset_skin ] = sw1.x;
|
|
|
|
- skinWeightArray[ offset_skin + 1 ] = sw1.y;
|
|
|
|
- skinWeightArray[ offset_skin + 2 ] = sw1.z;
|
|
|
|
- skinWeightArray[ offset_skin + 3 ] = sw1.w;
|
|
|
|
|
|
+ skinWeightArray[ offset_skin + 4 ] = sw2.x;
|
|
|
|
+ skinWeightArray[ offset_skin + 5 ] = sw2.y;
|
|
|
|
+ skinWeightArray[ offset_skin + 6 ] = sw2.z;
|
|
|
|
+ skinWeightArray[ offset_skin + 7 ] = sw2.w;
|
|
|
|
|
|
- skinWeightArray[ offset_skin + 4 ] = sw2.x;
|
|
|
|
- skinWeightArray[ offset_skin + 5 ] = sw2.y;
|
|
|
|
- skinWeightArray[ offset_skin + 6 ] = sw2.z;
|
|
|
|
- skinWeightArray[ offset_skin + 7 ] = sw2.w;
|
|
|
|
|
|
+ skinWeightArray[ offset_skin + 8 ] = sw3.x;
|
|
|
|
+ skinWeightArray[ offset_skin + 9 ] = sw3.y;
|
|
|
|
+ skinWeightArray[ offset_skin + 10 ] = sw3.z;
|
|
|
|
+ skinWeightArray[ offset_skin + 11 ] = sw3.w;
|
|
|
|
|
|
- skinWeightArray[ offset_skin + 8 ] = sw3.x;
|
|
|
|
- skinWeightArray[ offset_skin + 9 ] = sw3.y;
|
|
|
|
- skinWeightArray[ offset_skin + 10 ] = sw3.z;
|
|
|
|
- skinWeightArray[ offset_skin + 11 ] = sw3.w;
|
|
|
|
|
|
+ skinWeightArray[ offset_skin + 12 ] = sw4.x;
|
|
|
|
+ skinWeightArray[ offset_skin + 13 ] = sw4.y;
|
|
|
|
+ skinWeightArray[ offset_skin + 14 ] = sw4.z;
|
|
|
|
+ skinWeightArray[ offset_skin + 15 ] = sw4.w;
|
|
|
|
|
|
- skinWeightArray[ offset_skin + 12 ] = sw4.x;
|
|
|
|
- skinWeightArray[ offset_skin + 13 ] = sw4.y;
|
|
|
|
- skinWeightArray[ offset_skin + 14 ] = sw4.z;
|
|
|
|
- skinWeightArray[ offset_skin + 15 ] = sw4.w;
|
|
|
|
|
|
+ // indices
|
|
|
|
|
|
- // indices
|
|
|
|
|
|
+ si1 = obj_skinIndices[ face.a ];
|
|
|
|
+ si2 = obj_skinIndices[ face.b ];
|
|
|
|
+ si3 = obj_skinIndices[ face.c ];
|
|
|
|
+ si4 = obj_skinIndices[ face.d ];
|
|
|
|
|
|
- si1 = obj_skinIndices[ face.a ];
|
|
|
|
- si2 = obj_skinIndices[ face.b ];
|
|
|
|
- si3 = obj_skinIndices[ face.c ];
|
|
|
|
- si4 = obj_skinIndices[ face.d ];
|
|
|
|
|
|
+ skinIndexArray[ offset_skin ] = si1.x;
|
|
|
|
+ skinIndexArray[ offset_skin + 1 ] = si1.y;
|
|
|
|
+ skinIndexArray[ offset_skin + 2 ] = si1.z;
|
|
|
|
+ skinIndexArray[ offset_skin + 3 ] = si1.w;
|
|
|
|
|
|
- skinIndexArray[ offset_skin ] = si1.x;
|
|
|
|
- skinIndexArray[ offset_skin + 1 ] = si1.y;
|
|
|
|
- skinIndexArray[ offset_skin + 2 ] = si1.z;
|
|
|
|
- skinIndexArray[ offset_skin + 3 ] = si1.w;
|
|
|
|
|
|
+ skinIndexArray[ offset_skin + 4 ] = si2.x;
|
|
|
|
+ skinIndexArray[ offset_skin + 5 ] = si2.y;
|
|
|
|
+ skinIndexArray[ offset_skin + 6 ] = si2.z;
|
|
|
|
+ skinIndexArray[ offset_skin + 7 ] = si2.w;
|
|
|
|
|
|
- skinIndexArray[ offset_skin + 4 ] = si2.x;
|
|
|
|
- skinIndexArray[ offset_skin + 5 ] = si2.y;
|
|
|
|
- skinIndexArray[ offset_skin + 6 ] = si2.z;
|
|
|
|
- skinIndexArray[ offset_skin + 7 ] = si2.w;
|
|
|
|
|
|
+ skinIndexArray[ offset_skin + 8 ] = si3.x;
|
|
|
|
+ skinIndexArray[ offset_skin + 9 ] = si3.y;
|
|
|
|
+ skinIndexArray[ offset_skin + 10 ] = si3.z;
|
|
|
|
+ skinIndexArray[ offset_skin + 11 ] = si3.w;
|
|
|
|
|
|
- skinIndexArray[ offset_skin + 8 ] = si3.x;
|
|
|
|
- skinIndexArray[ offset_skin + 9 ] = si3.y;
|
|
|
|
- skinIndexArray[ offset_skin + 10 ] = si3.z;
|
|
|
|
- skinIndexArray[ offset_skin + 11 ] = si3.w;
|
|
|
|
|
|
+ skinIndexArray[ offset_skin + 12 ] = si4.x;
|
|
|
|
+ skinIndexArray[ offset_skin + 13 ] = si4.y;
|
|
|
|
+ skinIndexArray[ offset_skin + 14 ] = si4.z;
|
|
|
|
+ skinIndexArray[ offset_skin + 15 ] = si4.w;
|
|
|
|
|
|
- skinIndexArray[ offset_skin + 12 ] = si4.x;
|
|
|
|
- skinIndexArray[ offset_skin + 13 ] = si4.y;
|
|
|
|
- skinIndexArray[ offset_skin + 14 ] = si4.z;
|
|
|
|
- skinIndexArray[ offset_skin + 15 ] = si4.w;
|
|
|
|
|
|
+ offset_skin += 16;
|
|
|
|
|
|
- offset_skin += 16;
|
|
|
|
|
|
+ }
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ if ( offset_skin > 0 ) {
|
|
|
|
|
|
- if ( offset_skin > 0 ) {
|
|
|
|
|
|
+ renderer.setDynamicArrayBuffer( geometryGroup.__webglSkinIndicesBuffer, skinIndexArray);
|
|
|
|
+ renderer.setDynamicArrayBuffer( geometryGroup.__webglSkinWeightsBuffer, skinWeightArray);
|
|
|
|
|
|
- renderer.setDynamicArrayBuffer( geometryGroup.__webglSkinIndicesBuffer, skinIndexArray);
|
|
|
|
- renderer.setDynamicArrayBuffer( geometryGroup.__webglSkinWeightsBuffer, skinWeightArray);
|
|
|
|
|
|
+ }
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ if ( dirtyColors && vertexColorType ) {
|
|
|
|
|
|
- if ( dirtyColors && vertexColorType ) {
|
|
|
|
|
|
+ for ( f = 0, fl = chunk_faces3.length; f < fl; f ++ ) {
|
|
|
|
|
|
- for ( f = 0, fl = chunk_faces3.length; f < fl; f ++ ) {
|
|
|
|
|
|
+ face = obj_faces[ chunk_faces3[ f ] ];
|
|
|
|
|
|
- face = obj_faces[ chunk_faces3[ f ] ];
|
|
|
|
|
|
+ vertexColors = face.vertexColors;
|
|
|
|
+ faceColor = face.color;
|
|
|
|
|
|
- vertexColors = face.vertexColors;
|
|
|
|
- faceColor = face.color;
|
|
|
|
|
|
+ if ( vertexColors.length === 3 && vertexColorType === THREE.VertexColors ) {
|
|
|
|
|
|
- if ( vertexColors.length === 3 && vertexColorType === THREE.VertexColors ) {
|
|
|
|
|
|
+ c1 = vertexColors[ 0 ];
|
|
|
|
+ c2 = vertexColors[ 1 ];
|
|
|
|
+ c3 = vertexColors[ 2 ];
|
|
|
|
|
|
- c1 = vertexColors[ 0 ];
|
|
|
|
- c2 = vertexColors[ 1 ];
|
|
|
|
- c3 = vertexColors[ 2 ];
|
|
|
|
|
|
+ } else {
|
|
|
|
|
|
- } else {
|
|
|
|
|
|
+ c1 = faceColor;
|
|
|
|
+ c2 = faceColor;
|
|
|
|
+ c3 = faceColor;
|
|
|
|
|
|
- c1 = faceColor;
|
|
|
|
- c2 = faceColor;
|
|
|
|
- c3 = faceColor;
|
|
|
|
|
|
+ }
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ colorArray[ offset_color ] = c1.r;
|
|
|
|
+ colorArray[ offset_color + 1 ] = c1.g;
|
|
|
|
+ colorArray[ offset_color + 2 ] = c1.b;
|
|
|
|
|
|
- colorArray[ offset_color ] = c1.r;
|
|
|
|
- colorArray[ offset_color + 1 ] = c1.g;
|
|
|
|
- colorArray[ offset_color + 2 ] = c1.b;
|
|
|
|
|
|
+ colorArray[ offset_color + 3 ] = c2.r;
|
|
|
|
+ colorArray[ offset_color + 4 ] = c2.g;
|
|
|
|
+ colorArray[ offset_color + 5 ] = c2.b;
|
|
|
|
|
|
- colorArray[ offset_color + 3 ] = c2.r;
|
|
|
|
- colorArray[ offset_color + 4 ] = c2.g;
|
|
|
|
- colorArray[ offset_color + 5 ] = c2.b;
|
|
|
|
|
|
+ colorArray[ offset_color + 6 ] = c3.r;
|
|
|
|
+ colorArray[ offset_color + 7 ] = c3.g;
|
|
|
|
+ colorArray[ offset_color + 8 ] = c3.b;
|
|
|
|
|
|
- colorArray[ offset_color + 6 ] = c3.r;
|
|
|
|
- colorArray[ offset_color + 7 ] = c3.g;
|
|
|
|
- colorArray[ offset_color + 8 ] = c3.b;
|
|
|
|
|
|
+ offset_color += 9;
|
|
|
|
|
|
- offset_color += 9;
|
|
|
|
|
|
+ }
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ for ( f = 0, fl = chunk_faces4.length; f < fl; f ++ ) {
|
|
|
|
|
|
- for ( f = 0, fl = chunk_faces4.length; f < fl; f ++ ) {
|
|
|
|
|
|
+ face = obj_faces[ chunk_faces4[ f ] ];
|
|
|
|
|
|
- face = obj_faces[ chunk_faces4[ f ] ];
|
|
|
|
|
|
+ vertexColors = face.vertexColors;
|
|
|
|
+ faceColor = face.color;
|
|
|
|
|
|
- vertexColors = face.vertexColors;
|
|
|
|
- faceColor = face.color;
|
|
|
|
|
|
+ if ( vertexColors.length === 4 && vertexColorType === THREE.VertexColors ) {
|
|
|
|
|
|
- if ( vertexColors.length === 4 && vertexColorType === THREE.VertexColors ) {
|
|
|
|
|
|
+ c1 = vertexColors[ 0 ];
|
|
|
|
+ c2 = vertexColors[ 1 ];
|
|
|
|
+ c3 = vertexColors[ 2 ];
|
|
|
|
+ c4 = vertexColors[ 3 ];
|
|
|
|
|
|
- c1 = vertexColors[ 0 ];
|
|
|
|
- c2 = vertexColors[ 1 ];
|
|
|
|
- c3 = vertexColors[ 2 ];
|
|
|
|
- c4 = vertexColors[ 3 ];
|
|
|
|
|
|
+ } else {
|
|
|
|
|
|
- } else {
|
|
|
|
|
|
+ c1 = faceColor;
|
|
|
|
+ c2 = faceColor;
|
|
|
|
+ c3 = faceColor;
|
|
|
|
+ c4 = faceColor;
|
|
|
|
|
|
- c1 = faceColor;
|
|
|
|
- c2 = faceColor;
|
|
|
|
- c3 = faceColor;
|
|
|
|
- c4 = faceColor;
|
|
|
|
|
|
+ }
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ colorArray[ offset_color ] = c1.r;
|
|
|
|
+ colorArray[ offset_color + 1 ] = c1.g;
|
|
|
|
+ colorArray[ offset_color + 2 ] = c1.b;
|
|
|
|
|
|
- colorArray[ offset_color ] = c1.r;
|
|
|
|
- colorArray[ offset_color + 1 ] = c1.g;
|
|
|
|
- colorArray[ offset_color + 2 ] = c1.b;
|
|
|
|
|
|
+ colorArray[ offset_color + 3 ] = c2.r;
|
|
|
|
+ colorArray[ offset_color + 4 ] = c2.g;
|
|
|
|
+ colorArray[ offset_color + 5 ] = c2.b;
|
|
|
|
|
|
- colorArray[ offset_color + 3 ] = c2.r;
|
|
|
|
- colorArray[ offset_color + 4 ] = c2.g;
|
|
|
|
- colorArray[ offset_color + 5 ] = c2.b;
|
|
|
|
|
|
+ colorArray[ offset_color + 6 ] = c3.r;
|
|
|
|
+ colorArray[ offset_color + 7 ] = c3.g;
|
|
|
|
+ colorArray[ offset_color + 8 ] = c3.b;
|
|
|
|
|
|
- colorArray[ offset_color + 6 ] = c3.r;
|
|
|
|
- colorArray[ offset_color + 7 ] = c3.g;
|
|
|
|
- colorArray[ offset_color + 8 ] = c3.b;
|
|
|
|
|
|
+ colorArray[ offset_color + 9 ] = c4.r;
|
|
|
|
+ colorArray[ offset_color + 10 ] = c4.g;
|
|
|
|
+ colorArray[ offset_color + 11 ] = c4.b;
|
|
|
|
|
|
- colorArray[ offset_color + 9 ] = c4.r;
|
|
|
|
- colorArray[ offset_color + 10 ] = c4.g;
|
|
|
|
- colorArray[ offset_color + 11 ] = c4.b;
|
|
|
|
|
|
+ offset_color += 12;
|
|
|
|
|
|
- offset_color += 12;
|
|
|
|
|
|
+ }
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ if ( offset_color > 0 ) {
|
|
|
|
|
|
- if ( offset_color > 0 ) {
|
|
|
|
|
|
+ renderer.setDynamicArrayBuffer( geometryGroup.__webglColorBuffer, colorArray);
|
|
|
|
|
|
- renderer.setDynamicArrayBuffer( geometryGroup.__webglColorBuffer, colorArray);
|
|
|
|
|
|
+ }
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ if ( dirtyTangents && geometry.hasTangents ) {
|
|
|
|
|
|
- if ( dirtyTangents && geometry.hasTangents ) {
|
|
|
|
|
|
+ for ( f = 0, fl = chunk_faces3.length; f < fl; f ++ ) {
|
|
|
|
|
|
- for ( f = 0, fl = chunk_faces3.length; f < fl; f ++ ) {
|
|
|
|
|
|
+ face = obj_faces[ chunk_faces3[ f ] ];
|
|
|
|
|
|
- face = obj_faces[ chunk_faces3[ f ] ];
|
|
|
|
|
|
+ vertexTangents = face.vertexTangents;
|
|
|
|
|
|
- vertexTangents = face.vertexTangents;
|
|
|
|
|
|
+ t1 = vertexTangents[ 0 ];
|
|
|
|
+ t2 = vertexTangents[ 1 ];
|
|
|
|
+ t3 = vertexTangents[ 2 ];
|
|
|
|
|
|
- t1 = vertexTangents[ 0 ];
|
|
|
|
- t2 = vertexTangents[ 1 ];
|
|
|
|
- t3 = vertexTangents[ 2 ];
|
|
|
|
|
|
+ tangentArray[ offset_tangent ] = t1.x;
|
|
|
|
+ tangentArray[ offset_tangent + 1 ] = t1.y;
|
|
|
|
+ tangentArray[ offset_tangent + 2 ] = t1.z;
|
|
|
|
+ tangentArray[ offset_tangent + 3 ] = t1.w;
|
|
|
|
|
|
- tangentArray[ offset_tangent ] = t1.x;
|
|
|
|
- tangentArray[ offset_tangent + 1 ] = t1.y;
|
|
|
|
- tangentArray[ offset_tangent + 2 ] = t1.z;
|
|
|
|
- tangentArray[ offset_tangent + 3 ] = t1.w;
|
|
|
|
|
|
+ tangentArray[ offset_tangent + 4 ] = t2.x;
|
|
|
|
+ tangentArray[ offset_tangent + 5 ] = t2.y;
|
|
|
|
+ tangentArray[ offset_tangent + 6 ] = t2.z;
|
|
|
|
+ tangentArray[ offset_tangent + 7 ] = t2.w;
|
|
|
|
|
|
- tangentArray[ offset_tangent + 4 ] = t2.x;
|
|
|
|
- tangentArray[ offset_tangent + 5 ] = t2.y;
|
|
|
|
- tangentArray[ offset_tangent + 6 ] = t2.z;
|
|
|
|
- tangentArray[ offset_tangent + 7 ] = t2.w;
|
|
|
|
|
|
+ tangentArray[ offset_tangent + 8 ] = t3.x;
|
|
|
|
+ tangentArray[ offset_tangent + 9 ] = t3.y;
|
|
|
|
+ tangentArray[ offset_tangent + 10 ] = t3.z;
|
|
|
|
+ tangentArray[ offset_tangent + 11 ] = t3.w;
|
|
|
|
|
|
- tangentArray[ offset_tangent + 8 ] = t3.x;
|
|
|
|
- tangentArray[ offset_tangent + 9 ] = t3.y;
|
|
|
|
- tangentArray[ offset_tangent + 10 ] = t3.z;
|
|
|
|
- tangentArray[ offset_tangent + 11 ] = t3.w;
|
|
|
|
|
|
+ offset_tangent += 12;
|
|
|
|
|
|
- offset_tangent += 12;
|
|
|
|
|
|
+ }
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ for ( f = 0, fl = chunk_faces4.length; f < fl; f ++ ) {
|
|
|
|
+
|
|
|
|
+ face = obj_faces[ chunk_faces4[ f ] ];
|
|
|
|
|
|
- for ( f = 0, fl = chunk_faces4.length; f < fl; f ++ ) {
|
|
|
|
|
|
+ vertexTangents = face.vertexTangents;
|
|
|
|
|
|
- face = obj_faces[ chunk_faces4[ f ] ];
|
|
|
|
|
|
+ t1 = vertexTangents[ 0 ];
|
|
|
|
+ t2 = vertexTangents[ 1 ];
|
|
|
|
+ t3 = vertexTangents[ 2 ];
|
|
|
|
+ t4 = vertexTangents[ 3 ];
|
|
|
|
|
|
- vertexTangents = face.vertexTangents;
|
|
|
|
|
|
+ tangentArray[ offset_tangent ] = t1.x;
|
|
|
|
+ tangentArray[ offset_tangent + 1 ] = t1.y;
|
|
|
|
+ tangentArray[ offset_tangent + 2 ] = t1.z;
|
|
|
|
+ tangentArray[ offset_tangent + 3 ] = t1.w;
|
|
|
|
|
|
- t1 = vertexTangents[ 0 ];
|
|
|
|
- t2 = vertexTangents[ 1 ];
|
|
|
|
- t3 = vertexTangents[ 2 ];
|
|
|
|
- t4 = vertexTangents[ 3 ];
|
|
|
|
|
|
+ tangentArray[ offset_tangent + 4 ] = t2.x;
|
|
|
|
+ tangentArray[ offset_tangent + 5 ] = t2.y;
|
|
|
|
+ tangentArray[ offset_tangent + 6 ] = t2.z;
|
|
|
|
+ tangentArray[ offset_tangent + 7 ] = t2.w;
|
|
|
|
|
|
- tangentArray[ offset_tangent ] = t1.x;
|
|
|
|
- tangentArray[ offset_tangent + 1 ] = t1.y;
|
|
|
|
- tangentArray[ offset_tangent + 2 ] = t1.z;
|
|
|
|
- tangentArray[ offset_tangent + 3 ] = t1.w;
|
|
|
|
|
|
+ tangentArray[ offset_tangent + 8 ] = t3.x;
|
|
|
|
+ tangentArray[ offset_tangent + 9 ] = t3.y;
|
|
|
|
+ tangentArray[ offset_tangent + 10 ] = t3.z;
|
|
|
|
+ tangentArray[ offset_tangent + 11 ] = t3.w;
|
|
|
|
|
|
- tangentArray[ offset_tangent + 4 ] = t2.x;
|
|
|
|
- tangentArray[ offset_tangent + 5 ] = t2.y;
|
|
|
|
- tangentArray[ offset_tangent + 6 ] = t2.z;
|
|
|
|
- tangentArray[ offset_tangent + 7 ] = t2.w;
|
|
|
|
|
|
+ tangentArray[ offset_tangent + 12 ] = t4.x;
|
|
|
|
+ tangentArray[ offset_tangent + 13 ] = t4.y;
|
|
|
|
+ tangentArray[ offset_tangent + 14 ] = t4.z;
|
|
|
|
+ tangentArray[ offset_tangent + 15 ] = t4.w;
|
|
|
|
|
|
- tangentArray[ offset_tangent + 8 ] = t3.x;
|
|
|
|
- tangentArray[ offset_tangent + 9 ] = t3.y;
|
|
|
|
- tangentArray[ offset_tangent + 10 ] = t3.z;
|
|
|
|
- tangentArray[ offset_tangent + 11 ] = t3.w;
|
|
|
|
|
|
+ offset_tangent += 16;
|
|
|
|
|
|
- tangentArray[ offset_tangent + 12 ] = t4.x;
|
|
|
|
- tangentArray[ offset_tangent + 13 ] = t4.y;
|
|
|
|
- tangentArray[ offset_tangent + 14 ] = t4.z;
|
|
|
|
- tangentArray[ offset_tangent + 15 ] = t4.w;
|
|
|
|
|
|
+ }
|
|
|
|
|
|
- offset_tangent += 16;
|
|
|
|
|
|
+ renderer.setDynamicArrayBuffer( geometryGroup.__webglTangentBuffer, tangentArray);
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
- renderer.setDynamicArrayBuffer( geometryGroup.__webglTangentBuffer, tangentArray);
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
|
|
+ if ( dirtyNormals && normalType ) {
|
|
|
|
|
|
- if ( dirtyNormals && normalType ) {
|
|
|
|
|
|
+ for ( f = 0, fl = chunk_faces3.length; f < fl; f ++ ) {
|
|
|
|
|
|
- for ( f = 0, fl = chunk_faces3.length; f < fl; f ++ ) {
|
|
|
|
|
|
+ face = obj_faces[ chunk_faces3[ f ] ];
|
|
|
|
|
|
- face = obj_faces[ chunk_faces3[ f ] ];
|
|
|
|
|
|
+ vertexNormals = face.vertexNormals;
|
|
|
|
+ faceNormal = face.normal;
|
|
|
|
|
|
- vertexNormals = face.vertexNormals;
|
|
|
|
- faceNormal = face.normal;
|
|
|
|
|
|
+ if ( vertexNormals.length === 3 && needsSmoothNormals ) {
|
|
|
|
|
|
- if ( vertexNormals.length === 3 && needsSmoothNormals ) {
|
|
|
|
|
|
+ for ( i = 0; i < 3; i ++ ) {
|
|
|
|
|
|
- for ( i = 0; i < 3; i ++ ) {
|
|
|
|
|
|
+ vn = vertexNormals[ i ];
|
|
|
|
|
|
- vn = vertexNormals[ i ];
|
|
|
|
|
|
+ normalArray[ offset_normal ] = vn.x;
|
|
|
|
+ normalArray[ offset_normal + 1 ] = vn.y;
|
|
|
|
+ normalArray[ offset_normal + 2 ] = vn.z;
|
|
|
|
|
|
- normalArray[ offset_normal ] = vn.x;
|
|
|
|
- normalArray[ offset_normal + 1 ] = vn.y;
|
|
|
|
- normalArray[ offset_normal + 2 ] = vn.z;
|
|
|
|
|
|
+ offset_normal += 3;
|
|
|
|
|
|
- offset_normal += 3;
|
|
|
|
|
|
+ }
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ } else {
|
|
|
|
|
|
- } else {
|
|
|
|
|
|
+ for ( i = 0; i < 3; i ++ ) {
|
|
|
|
|
|
- for ( i = 0; i < 3; i ++ ) {
|
|
|
|
|
|
+ normalArray[ offset_normal ] = faceNormal.x;
|
|
|
|
+ normalArray[ offset_normal + 1 ] = faceNormal.y;
|
|
|
|
+ normalArray[ offset_normal + 2 ] = faceNormal.z;
|
|
|
|
|
|
- normalArray[ offset_normal ] = faceNormal.x;
|
|
|
|
- normalArray[ offset_normal + 1 ] = faceNormal.y;
|
|
|
|
- normalArray[ offset_normal + 2 ] = faceNormal.z;
|
|
|
|
|
|
+ offset_normal += 3;
|
|
|
|
|
|
- offset_normal += 3;
|
|
|
|
|
|
+ }
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ for ( f = 0, fl = chunk_faces4.length; f < fl; f ++ ) {
|
|
|
|
|
|
- for ( f = 0, fl = chunk_faces4.length; f < fl; f ++ ) {
|
|
|
|
|
|
+ face = obj_faces[ chunk_faces4[ f ] ];
|
|
|
|
|
|
- face = obj_faces[ chunk_faces4[ f ] ];
|
|
|
|
|
|
+ vertexNormals = face.vertexNormals;
|
|
|
|
+ faceNormal = face.normal;
|
|
|
|
|
|
- vertexNormals = face.vertexNormals;
|
|
|
|
- faceNormal = face.normal;
|
|
|
|
|
|
+ if ( vertexNormals.length === 4 && needsSmoothNormals ) {
|
|
|
|
|
|
- if ( vertexNormals.length === 4 && needsSmoothNormals ) {
|
|
|
|
|
|
+ for ( i = 0; i < 4; i ++ ) {
|
|
|
|
|
|
- for ( i = 0; i < 4; i ++ ) {
|
|
|
|
|
|
+ vn = vertexNormals[ i ];
|
|
|
|
|
|
- vn = vertexNormals[ i ];
|
|
|
|
|
|
+ normalArray[ offset_normal ] = vn.x;
|
|
|
|
+ normalArray[ offset_normal + 1 ] = vn.y;
|
|
|
|
+ normalArray[ offset_normal + 2 ] = vn.z;
|
|
|
|
|
|
- normalArray[ offset_normal ] = vn.x;
|
|
|
|
- normalArray[ offset_normal + 1 ] = vn.y;
|
|
|
|
- normalArray[ offset_normal + 2 ] = vn.z;
|
|
|
|
|
|
+ offset_normal += 3;
|
|
|
|
|
|
- offset_normal += 3;
|
|
|
|
|
|
+ }
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ } else {
|
|
|
|
|
|
- } else {
|
|
|
|
|
|
+ for ( i = 0; i < 4; i ++ ) {
|
|
|
|
|
|
- for ( i = 0; i < 4; i ++ ) {
|
|
|
|
|
|
+ normalArray[ offset_normal ] = faceNormal.x;
|
|
|
|
+ normalArray[ offset_normal + 1 ] = faceNormal.y;
|
|
|
|
+ normalArray[ offset_normal + 2 ] = faceNormal.z;
|
|
|
|
|
|
- normalArray[ offset_normal ] = faceNormal.x;
|
|
|
|
- normalArray[ offset_normal + 1 ] = faceNormal.y;
|
|
|
|
- normalArray[ offset_normal + 2 ] = faceNormal.z;
|
|
|
|
|
|
+ offset_normal += 3;
|
|
|
|
|
|
- offset_normal += 3;
|
|
|
|
|
|
+ }
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ renderer.setDynamicArrayBuffer( geometryGroup.__webglNormalBuffer, normalArray);
|
|
|
|
+
|
|
}
|
|
}
|
|
|
|
|
|
- renderer.setDynamicArrayBuffer( geometryGroup.__webglNormalBuffer, normalArray);
|
|
|
|
|
|
+ if ( dirtyUvs && obj_uvs && uvType ) {
|
|
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if ( dirtyUvs && obj_uvs && uvType ) {
|
|
|
|
|
|
+ for ( f = 0, fl = chunk_faces3.length; f < fl; f ++ ) {
|
|
|
|
|
|
- for ( f = 0, fl = chunk_faces3.length; f < fl; f ++ ) {
|
|
|
|
|
|
+ fi = chunk_faces3[ f ];
|
|
|
|
|
|
- fi = chunk_faces3[ f ];
|
|
|
|
|
|
+ uv = obj_uvs[ fi ];
|
|
|
|
|
|
- uv = obj_uvs[ fi ];
|
|
|
|
|
|
+ if ( uv === undefined ) continue;
|
|
|
|
|
|
- if ( uv === undefined ) continue;
|
|
|
|
|
|
+ for ( i = 0; i < 3; i ++ ) {
|
|
|
|
|
|
- for ( i = 0; i < 3; i ++ ) {
|
|
|
|
|
|
+ uvi = uv[ i ];
|
|
|
|
|
|
- uvi = uv[ i ];
|
|
|
|
|
|
+ uvArray[ offset_uv ] = uvi.x;
|
|
|
|
+ uvArray[ offset_uv + 1 ] = uvi.y;
|
|
|
|
|
|
- uvArray[ offset_uv ] = uvi.x;
|
|
|
|
- uvArray[ offset_uv + 1 ] = uvi.y;
|
|
|
|
|
|
+ offset_uv += 2;
|
|
|
|
|
|
- offset_uv += 2;
|
|
|
|
|
|
+ }
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ for ( f = 0, fl = chunk_faces4.length; f < fl; f ++ ) {
|
|
|
|
|
|
- for ( f = 0, fl = chunk_faces4.length; f < fl; f ++ ) {
|
|
|
|
|
|
+ fi = chunk_faces4[ f ];
|
|
|
|
|
|
- fi = chunk_faces4[ f ];
|
|
|
|
|
|
+ uv = obj_uvs[ fi ];
|
|
|
|
|
|
- uv = obj_uvs[ fi ];
|
|
|
|
|
|
+ if ( uv === undefined ) continue;
|
|
|
|
|
|
- if ( uv === undefined ) continue;
|
|
|
|
|
|
+ for ( i = 0; i < 4; i ++ ) {
|
|
|
|
|
|
- for ( i = 0; i < 4; i ++ ) {
|
|
|
|
|
|
+ uvi = uv[ i ];
|
|
|
|
|
|
- uvi = uv[ i ];
|
|
|
|
|
|
+ uvArray[ offset_uv ] = uvi.x;
|
|
|
|
+ uvArray[ offset_uv + 1 ] = uvi.y;
|
|
|
|
|
|
- uvArray[ offset_uv ] = uvi.x;
|
|
|
|
- uvArray[ offset_uv + 1 ] = uvi.y;
|
|
|
|
|
|
+ offset_uv += 2;
|
|
|
|
|
|
- offset_uv += 2;
|
|
|
|
|
|
+ }
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ if ( offset_uv > 0 ) {
|
|
|
|
|
|
- if ( offset_uv > 0 ) {
|
|
|
|
|
|
+ renderer.setDynamicArrayBuffer( geometryGroup.__webglUVBuffer, uvArray);
|
|
|
|
|
|
- renderer.setDynamicArrayBuffer( geometryGroup.__webglUVBuffer, uvArray);
|
|
|
|
|
|
+ }
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ if ( dirtyUvs && obj_uvs2 && uvType ) {
|
|
|
|
|
|
- if ( dirtyUvs && obj_uvs2 && uvType ) {
|
|
|
|
|
|
+ for ( f = 0, fl = chunk_faces3.length; f < fl; f ++ ) {
|
|
|
|
|
|
- for ( f = 0, fl = chunk_faces3.length; f < fl; f ++ ) {
|
|
|
|
|
|
+ fi = chunk_faces3[ f ];
|
|
|
|
|
|
- fi = chunk_faces3[ f ];
|
|
|
|
|
|
+ uv2 = obj_uvs2[ fi ];
|
|
|
|
|
|
- uv2 = obj_uvs2[ fi ];
|
|
|
|
|
|
+ if ( uv2 === undefined ) continue;
|
|
|
|
|
|
- if ( uv2 === undefined ) continue;
|
|
|
|
|
|
+ for ( i = 0; i < 3; i ++ ) {
|
|
|
|
|
|
- for ( i = 0; i < 3; i ++ ) {
|
|
|
|
|
|
+ uv2i = uv2[ i ];
|
|
|
|
|
|
- uv2i = uv2[ i ];
|
|
|
|
|
|
+ uv2Array[ offset_uv2 ] = uv2i.x;
|
|
|
|
+ uv2Array[ offset_uv2 + 1 ] = uv2i.y;
|
|
|
|
|
|
- uv2Array[ offset_uv2 ] = uv2i.x;
|
|
|
|
- uv2Array[ offset_uv2 + 1 ] = uv2i.y;
|
|
|
|
|
|
+ offset_uv2 += 2;
|
|
|
|
|
|
- offset_uv2 += 2;
|
|
|
|
|
|
+ }
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ for ( f = 0, fl = chunk_faces4.length; f < fl; f ++ ) {
|
|
|
|
|
|
- for ( f = 0, fl = chunk_faces4.length; f < fl; f ++ ) {
|
|
|
|
|
|
+ fi = chunk_faces4[ f ];
|
|
|
|
|
|
- fi = chunk_faces4[ f ];
|
|
|
|
|
|
+ uv2 = obj_uvs2[ fi ];
|
|
|
|
|
|
- uv2 = obj_uvs2[ fi ];
|
|
|
|
|
|
+ if ( uv2 === undefined ) continue;
|
|
|
|
|
|
- if ( uv2 === undefined ) continue;
|
|
|
|
|
|
+ for ( i = 0; i < 4; i ++ ) {
|
|
|
|
|
|
- for ( i = 0; i < 4; i ++ ) {
|
|
|
|
|
|
+ uv2i = uv2[ i ];
|
|
|
|
|
|
- uv2i = uv2[ i ];
|
|
|
|
|
|
+ uv2Array[ offset_uv2 ] = uv2i.x;
|
|
|
|
+ uv2Array[ offset_uv2 + 1 ] = uv2i.y;
|
|
|
|
|
|
- uv2Array[ offset_uv2 ] = uv2i.x;
|
|
|
|
- uv2Array[ offset_uv2 + 1 ] = uv2i.y;
|
|
|
|
|
|
+ offset_uv2 += 2;
|
|
|
|
|
|
- offset_uv2 += 2;
|
|
|
|
|
|
+ }
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ if ( offset_uv2 > 0 ) {
|
|
|
|
|
|
- if ( offset_uv2 > 0 ) {
|
|
|
|
|
|
+ renderer.setDynamicArrayBuffer( geometryGroup.__webglUV2Buffer, uv2Array);
|
|
|
|
|
|
- renderer.setDynamicArrayBuffer( geometryGroup.__webglUV2Buffer, uv2Array);
|
|
|
|
|
|
+ }
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ if ( dirtyElements ) {
|
|
|
|
|
|
- if ( dirtyElements ) {
|
|
|
|
|
|
+ for ( f = 0, fl = chunk_faces3.length; f < fl; f ++ ) {
|
|
|
|
|
|
- for ( f = 0, fl = chunk_faces3.length; f < fl; f ++ ) {
|
|
|
|
|
|
+ faceArray[ offset_face ] = vertexIndex;
|
|
|
|
+ faceArray[ offset_face + 1 ] = vertexIndex + 1;
|
|
|
|
+ faceArray[ offset_face + 2 ] = vertexIndex + 2;
|
|
|
|
|
|
- faceArray[ offset_face ] = vertexIndex;
|
|
|
|
- faceArray[ offset_face + 1 ] = vertexIndex + 1;
|
|
|
|
- faceArray[ offset_face + 2 ] = vertexIndex + 2;
|
|
|
|
|
|
+ offset_face += 3;
|
|
|
|
|
|
- offset_face += 3;
|
|
|
|
|
|
+ lineArray[ offset_line ] = vertexIndex;
|
|
|
|
+ lineArray[ offset_line + 1 ] = vertexIndex + 1;
|
|
|
|
|
|
- lineArray[ offset_line ] = vertexIndex;
|
|
|
|
- lineArray[ offset_line + 1 ] = vertexIndex + 1;
|
|
|
|
|
|
+ lineArray[ offset_line + 2 ] = vertexIndex;
|
|
|
|
+ lineArray[ offset_line + 3 ] = vertexIndex + 2;
|
|
|
|
|
|
- lineArray[ offset_line + 2 ] = vertexIndex;
|
|
|
|
- lineArray[ offset_line + 3 ] = vertexIndex + 2;
|
|
|
|
|
|
+ lineArray[ offset_line + 4 ] = vertexIndex + 1;
|
|
|
|
+ lineArray[ offset_line + 5 ] = vertexIndex + 2;
|
|
|
|
|
|
- lineArray[ offset_line + 4 ] = vertexIndex + 1;
|
|
|
|
- lineArray[ offset_line + 5 ] = vertexIndex + 2;
|
|
|
|
|
|
+ offset_line += 6;
|
|
|
|
|
|
- offset_line += 6;
|
|
|
|
|
|
+ vertexIndex += 3;
|
|
|
|
|
|
- vertexIndex += 3;
|
|
|
|
|
|
+ }
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ for ( f = 0, fl = chunk_faces4.length; f < fl; f ++ ) {
|
|
|
|
+
|
|
|
|
+ faceArray[ offset_face ] = vertexIndex;
|
|
|
|
+ faceArray[ offset_face + 1 ] = vertexIndex + 1;
|
|
|
|
+ faceArray[ offset_face + 2 ] = vertexIndex + 3;
|
|
|
|
|
|
- for ( f = 0, fl = chunk_faces4.length; f < fl; f ++ ) {
|
|
|
|
|
|
+ faceArray[ offset_face + 3 ] = vertexIndex + 1;
|
|
|
|
+ faceArray[ offset_face + 4 ] = vertexIndex + 2;
|
|
|
|
+ faceArray[ offset_face + 5 ] = vertexIndex + 3;
|
|
|
|
|
|
- faceArray[ offset_face ] = vertexIndex;
|
|
|
|
- faceArray[ offset_face + 1 ] = vertexIndex + 1;
|
|
|
|
- faceArray[ offset_face + 2 ] = vertexIndex + 3;
|
|
|
|
|
|
+ offset_face += 6;
|
|
|
|
|
|
- faceArray[ offset_face + 3 ] = vertexIndex + 1;
|
|
|
|
- faceArray[ offset_face + 4 ] = vertexIndex + 2;
|
|
|
|
- faceArray[ offset_face + 5 ] = vertexIndex + 3;
|
|
|
|
|
|
+ lineArray[ offset_line ] = vertexIndex;
|
|
|
|
+ lineArray[ offset_line + 1 ] = vertexIndex + 1;
|
|
|
|
|
|
- offset_face += 6;
|
|
|
|
|
|
+ lineArray[ offset_line + 2 ] = vertexIndex;
|
|
|
|
+ lineArray[ offset_line + 3 ] = vertexIndex + 3;
|
|
|
|
|
|
- lineArray[ offset_line ] = vertexIndex;
|
|
|
|
- lineArray[ offset_line + 1 ] = vertexIndex + 1;
|
|
|
|
|
|
+ lineArray[ offset_line + 4 ] = vertexIndex + 1;
|
|
|
|
+ lineArray[ offset_line + 5 ] = vertexIndex + 2;
|
|
|
|
|
|
- lineArray[ offset_line + 2 ] = vertexIndex;
|
|
|
|
- lineArray[ offset_line + 3 ] = vertexIndex + 3;
|
|
|
|
|
|
+ lineArray[ offset_line + 6 ] = vertexIndex + 2;
|
|
|
|
+ lineArray[ offset_line + 7 ] = vertexIndex + 3;
|
|
|
|
|
|
- lineArray[ offset_line + 4 ] = vertexIndex + 1;
|
|
|
|
- lineArray[ offset_line + 5 ] = vertexIndex + 2;
|
|
|
|
|
|
+ offset_line += 8;
|
|
|
|
|
|
- lineArray[ offset_line + 6 ] = vertexIndex + 2;
|
|
|
|
- lineArray[ offset_line + 7 ] = vertexIndex + 3;
|
|
|
|
|
|
+ vertexIndex += 4;
|
|
|
|
|
|
- offset_line += 8;
|
|
|
|
|
|
+ }
|
|
|
|
|
|
- vertexIndex += 4;
|
|
|
|
|
|
+ renderer.setDynamicIndexBuffer( geometryGroup.__webglFaceBuffer, faceArray);
|
|
|
|
+ renderer.setDynamicIndexBuffer( geometryGroup.__webglLineBuffer, lineArray);
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
- renderer.setDynamicIndexBuffer( geometryGroup.__webglFaceBuffer, faceArray);
|
|
|
|
- renderer.setDynamicIndexBuffer( geometryGroup.__webglLineBuffer, lineArray);
|
|
|
|
|
|
+ if ( customAttributes ) {
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ for ( i = 0, il = customAttributes.length; i < il; i ++ ) {
|
|
|
|
|
|
- if ( customAttributes ) {
|
|
|
|
|
|
+ customAttribute = customAttributes[ i ];
|
|
|
|
|
|
- for ( i = 0, il = customAttributes.length; i < il; i ++ ) {
|
|
|
|
|
|
+ if ( ! customAttribute.__original.needsUpdate ) continue;
|
|
|
|
|
|
- customAttribute = customAttributes[ i ];
|
|
|
|
|
|
+ offset_custom = 0;
|
|
|
|
+ offset_customSrc = 0;
|
|
|
|
|
|
- if ( ! customAttribute.__original.needsUpdate ) continue;
|
|
|
|
|
|
+ if ( customAttribute.size === 1 ) {
|
|
|
|
|
|
- offset_custom = 0;
|
|
|
|
- offset_customSrc = 0;
|
|
|
|
|
|
+ if ( customAttribute.boundTo === undefined || customAttribute.boundTo === "vertices" ) {
|
|
|
|
|
|
- if ( customAttribute.size === 1 ) {
|
|
|
|
|
|
+ for ( f = 0, fl = chunk_faces3.length; f < fl; f ++ ) {
|
|
|
|
|
|
- if ( customAttribute.boundTo === undefined || customAttribute.boundTo === "vertices" ) {
|
|
|
|
|
|
+ face = obj_faces[ chunk_faces3[ f ] ];
|
|
|
|
|
|
- for ( f = 0, fl = chunk_faces3.length; f < fl; f ++ ) {
|
|
|
|
|
|
+ customAttribute.array[ offset_custom ] = customAttribute.value[ face.a ];
|
|
|
|
+ customAttribute.array[ offset_custom + 1 ] = customAttribute.value[ face.b ];
|
|
|
|
+ customAttribute.array[ offset_custom + 2 ] = customAttribute.value[ face.c ];
|
|
|
|
|
|
- face = obj_faces[ chunk_faces3[ f ] ];
|
|
|
|
|
|
+ offset_custom += 3;
|
|
|
|
|
|
- customAttribute.array[ offset_custom ] = customAttribute.value[ face.a ];
|
|
|
|
- customAttribute.array[ offset_custom + 1 ] = customAttribute.value[ face.b ];
|
|
|
|
- customAttribute.array[ offset_custom + 2 ] = customAttribute.value[ face.c ];
|
|
|
|
|
|
+ }
|
|
|
|
|
|
- offset_custom += 3;
|
|
|
|
|
|
+ for ( f = 0, fl = chunk_faces4.length; f < fl; f ++ ) {
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ face = obj_faces[ chunk_faces4[ f ] ];
|
|
|
|
|
|
- for ( f = 0, fl = chunk_faces4.length; f < fl; f ++ ) {
|
|
|
|
|
|
+ customAttribute.array[ offset_custom ] = customAttribute.value[ face.a ];
|
|
|
|
+ customAttribute.array[ offset_custom + 1 ] = customAttribute.value[ face.b ];
|
|
|
|
+ customAttribute.array[ offset_custom + 2 ] = customAttribute.value[ face.c ];
|
|
|
|
+ customAttribute.array[ offset_custom + 3 ] = customAttribute.value[ face.d ];
|
|
|
|
|
|
- face = obj_faces[ chunk_faces4[ f ] ];
|
|
|
|
|
|
+ offset_custom += 4;
|
|
|
|
|
|
- customAttribute.array[ offset_custom ] = customAttribute.value[ face.a ];
|
|
|
|
- customAttribute.array[ offset_custom + 1 ] = customAttribute.value[ face.b ];
|
|
|
|
- customAttribute.array[ offset_custom + 2 ] = customAttribute.value[ face.c ];
|
|
|
|
- customAttribute.array[ offset_custom + 3 ] = customAttribute.value[ face.d ];
|
|
|
|
|
|
+ }
|
|
|
|
|
|
- offset_custom += 4;
|
|
|
|
|
|
+ } else if ( customAttribute.boundTo === "faces" ) {
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ for ( f = 0, fl = chunk_faces3.length; f < fl; f ++ ) {
|
|
|
|
|
|
- } else if ( customAttribute.boundTo === "faces" ) {
|
|
|
|
|
|
+ value = customAttribute.value[ chunk_faces3[ f ] ];
|
|
|
|
|
|
- for ( f = 0, fl = chunk_faces3.length; f < fl; f ++ ) {
|
|
|
|
|
|
+ customAttribute.array[ offset_custom ] = value;
|
|
|
|
+ customAttribute.array[ offset_custom + 1 ] = value;
|
|
|
|
+ customAttribute.array[ offset_custom + 2 ] = value;
|
|
|
|
|
|
- value = customAttribute.value[ chunk_faces3[ f ] ];
|
|
|
|
|
|
+ offset_custom += 3;
|
|
|
|
|
|
- customAttribute.array[ offset_custom ] = value;
|
|
|
|
- customAttribute.array[ offset_custom + 1 ] = value;
|
|
|
|
- customAttribute.array[ offset_custom + 2 ] = value;
|
|
|
|
|
|
+ }
|
|
|
|
|
|
- offset_custom += 3;
|
|
|
|
|
|
+ for ( f = 0, fl = chunk_faces4.length; f < fl; f ++ ) {
|
|
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- for ( f = 0, fl = chunk_faces4.length; f < fl; f ++ ) {
|
|
|
|
|
|
+ value = customAttribute.value[ chunk_faces4[ f ] ];
|
|
|
|
|
|
- value = customAttribute.value[ chunk_faces4[ f ] ];
|
|
|
|
|
|
+ customAttribute.array[ offset_custom ] = value;
|
|
|
|
+ customAttribute.array[ offset_custom + 1 ] = value;
|
|
|
|
+ customAttribute.array[ offset_custom + 2 ] = value;
|
|
|
|
+ customAttribute.array[ offset_custom + 3 ] = value;
|
|
|
|
|
|
- customAttribute.array[ offset_custom ] = value;
|
|
|
|
- customAttribute.array[ offset_custom + 1 ] = value;
|
|
|
|
- customAttribute.array[ offset_custom + 2 ] = value;
|
|
|
|
- customAttribute.array[ offset_custom + 3 ] = value;
|
|
|
|
|
|
+ offset_custom += 4;
|
|
|
|
|
|
- offset_custom += 4;
|
|
|
|
|
|
+ }
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ } else if ( customAttribute.size === 2 ) {
|
|
|
|
|
|
- } else if ( customAttribute.size === 2 ) {
|
|
|
|
|
|
+ if ( customAttribute.boundTo === undefined || customAttribute.boundTo === "vertices" ) {
|
|
|
|
|
|
- if ( customAttribute.boundTo === undefined || customAttribute.boundTo === "vertices" ) {
|
|
|
|
|
|
+ for ( f = 0, fl = chunk_faces3.length; f < fl; f ++ ) {
|
|
|
|
|
|
- for ( f = 0, fl = chunk_faces3.length; f < fl; f ++ ) {
|
|
|
|
|
|
+ face = obj_faces[ chunk_faces3[ f ] ];
|
|
|
|
|
|
- face = obj_faces[ chunk_faces3[ f ] ];
|
|
|
|
|
|
+ v1 = customAttribute.value[ face.a ];
|
|
|
|
+ v2 = customAttribute.value[ face.b ];
|
|
|
|
+ v3 = customAttribute.value[ face.c ];
|
|
|
|
|
|
- v1 = customAttribute.value[ face.a ];
|
|
|
|
- v2 = customAttribute.value[ face.b ];
|
|
|
|
- v3 = customAttribute.value[ face.c ];
|
|
|
|
|
|
+ customAttribute.array[ offset_custom ] = v1.x;
|
|
|
|
+ customAttribute.array[ offset_custom + 1 ] = v1.y;
|
|
|
|
|
|
- customAttribute.array[ offset_custom ] = v1.x;
|
|
|
|
- customAttribute.array[ offset_custom + 1 ] = v1.y;
|
|
|
|
|
|
+ customAttribute.array[ offset_custom + 2 ] = v2.x;
|
|
|
|
+ customAttribute.array[ offset_custom + 3 ] = v2.y;
|
|
|
|
|
|
- customAttribute.array[ offset_custom + 2 ] = v2.x;
|
|
|
|
- customAttribute.array[ offset_custom + 3 ] = v2.y;
|
|
|
|
|
|
+ customAttribute.array[ offset_custom + 4 ] = v3.x;
|
|
|
|
+ customAttribute.array[ offset_custom + 5 ] = v3.y;
|
|
|
|
|
|
- customAttribute.array[ offset_custom + 4 ] = v3.x;
|
|
|
|
- customAttribute.array[ offset_custom + 5 ] = v3.y;
|
|
|
|
|
|
+ offset_custom += 6;
|
|
|
|
|
|
- offset_custom += 6;
|
|
|
|
|
|
+ }
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ for ( f = 0, fl = chunk_faces4.length; f < fl; f ++ ) {
|
|
|
|
|
|
- for ( f = 0, fl = chunk_faces4.length; f < fl; f ++ ) {
|
|
|
|
|
|
+ face = obj_faces[ chunk_faces4[ f ] ];
|
|
|
|
|
|
- face = obj_faces[ chunk_faces4[ f ] ];
|
|
|
|
|
|
+ v1 = customAttribute.value[ face.a ];
|
|
|
|
+ v2 = customAttribute.value[ face.b ];
|
|
|
|
+ v3 = customAttribute.value[ face.c ];
|
|
|
|
+ v4 = customAttribute.value[ face.d ];
|
|
|
|
|
|
- v1 = customAttribute.value[ face.a ];
|
|
|
|
- v2 = customAttribute.value[ face.b ];
|
|
|
|
- v3 = customAttribute.value[ face.c ];
|
|
|
|
- v4 = customAttribute.value[ face.d ];
|
|
|
|
|
|
+ customAttribute.array[ offset_custom ] = v1.x;
|
|
|
|
+ customAttribute.array[ offset_custom + 1 ] = v1.y;
|
|
|
|
|
|
- customAttribute.array[ offset_custom ] = v1.x;
|
|
|
|
- customAttribute.array[ offset_custom + 1 ] = v1.y;
|
|
|
|
|
|
+ customAttribute.array[ offset_custom + 2 ] = v2.x;
|
|
|
|
+ customAttribute.array[ offset_custom + 3 ] = v2.y;
|
|
|
|
|
|
- customAttribute.array[ offset_custom + 2 ] = v2.x;
|
|
|
|
- customAttribute.array[ offset_custom + 3 ] = v2.y;
|
|
|
|
|
|
+ customAttribute.array[ offset_custom + 4 ] = v3.x;
|
|
|
|
+ customAttribute.array[ offset_custom + 5 ] = v3.y;
|
|
|
|
|
|
- customAttribute.array[ offset_custom + 4 ] = v3.x;
|
|
|
|
- customAttribute.array[ offset_custom + 5 ] = v3.y;
|
|
|
|
|
|
+ customAttribute.array[ offset_custom + 6 ] = v4.x;
|
|
|
|
+ customAttribute.array[ offset_custom + 7 ] = v4.y;
|
|
|
|
|
|
- customAttribute.array[ offset_custom + 6 ] = v4.x;
|
|
|
|
- customAttribute.array[ offset_custom + 7 ] = v4.y;
|
|
|
|
|
|
+ offset_custom += 8;
|
|
|
|
|
|
- offset_custom += 8;
|
|
|
|
|
|
+ }
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ } else if ( customAttribute.boundTo === "faces" ) {
|
|
|
|
|
|
- } else if ( customAttribute.boundTo === "faces" ) {
|
|
|
|
|
|
+ for ( f = 0, fl = chunk_faces3.length; f < fl; f ++ ) {
|
|
|
|
|
|
- for ( f = 0, fl = chunk_faces3.length; f < fl; f ++ ) {
|
|
|
|
|
|
+ value = customAttribute.value[ chunk_faces3[ f ] ];
|
|
|
|
|
|
- value = customAttribute.value[ chunk_faces3[ f ] ];
|
|
|
|
|
|
+ v1 = value;
|
|
|
|
+ v2 = value;
|
|
|
|
+ v3 = value;
|
|
|
|
|
|
- v1 = value;
|
|
|
|
- v2 = value;
|
|
|
|
- v3 = value;
|
|
|
|
|
|
+ customAttribute.array[ offset_custom ] = v1.x;
|
|
|
|
+ customAttribute.array[ offset_custom + 1 ] = v1.y;
|
|
|
|
|
|
- customAttribute.array[ offset_custom ] = v1.x;
|
|
|
|
- customAttribute.array[ offset_custom + 1 ] = v1.y;
|
|
|
|
|
|
+ customAttribute.array[ offset_custom + 2 ] = v2.x;
|
|
|
|
+ customAttribute.array[ offset_custom + 3 ] = v2.y;
|
|
|
|
|
|
- customAttribute.array[ offset_custom + 2 ] = v2.x;
|
|
|
|
- customAttribute.array[ offset_custom + 3 ] = v2.y;
|
|
|
|
|
|
+ customAttribute.array[ offset_custom + 4 ] = v3.x;
|
|
|
|
+ customAttribute.array[ offset_custom + 5 ] = v3.y;
|
|
|
|
|
|
- customAttribute.array[ offset_custom + 4 ] = v3.x;
|
|
|
|
- customAttribute.array[ offset_custom + 5 ] = v3.y;
|
|
|
|
|
|
+ offset_custom += 6;
|
|
|
|
|
|
- offset_custom += 6;
|
|
|
|
|
|
+ }
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ for ( f = 0, fl = chunk_faces4.length; f < fl; f ++ ) {
|
|
|
|
|
|
- for ( f = 0, fl = chunk_faces4.length; f < fl; f ++ ) {
|
|
|
|
|
|
+ value = customAttribute.value[ chunk_faces4[ f ] ];
|
|
|
|
|
|
- value = customAttribute.value[ chunk_faces4[ f ] ];
|
|
|
|
|
|
+ v1 = value;
|
|
|
|
+ v2 = value;
|
|
|
|
+ v3 = value;
|
|
|
|
+ v4 = value;
|
|
|
|
|
|
- v1 = value;
|
|
|
|
- v2 = value;
|
|
|
|
- v3 = value;
|
|
|
|
- v4 = value;
|
|
|
|
|
|
+ customAttribute.array[ offset_custom ] = v1.x;
|
|
|
|
+ customAttribute.array[ offset_custom + 1 ] = v1.y;
|
|
|
|
|
|
- customAttribute.array[ offset_custom ] = v1.x;
|
|
|
|
- customAttribute.array[ offset_custom + 1 ] = v1.y;
|
|
|
|
|
|
+ customAttribute.array[ offset_custom + 2 ] = v2.x;
|
|
|
|
+ customAttribute.array[ offset_custom + 3 ] = v2.y;
|
|
|
|
|
|
- customAttribute.array[ offset_custom + 2 ] = v2.x;
|
|
|
|
- customAttribute.array[ offset_custom + 3 ] = v2.y;
|
|
|
|
|
|
+ customAttribute.array[ offset_custom + 4 ] = v3.x;
|
|
|
|
+ customAttribute.array[ offset_custom + 5 ] = v3.y;
|
|
|
|
|
|
- customAttribute.array[ offset_custom + 4 ] = v3.x;
|
|
|
|
- customAttribute.array[ offset_custom + 5 ] = v3.y;
|
|
|
|
|
|
+ customAttribute.array[ offset_custom + 6 ] = v4.x;
|
|
|
|
+ customAttribute.array[ offset_custom + 7 ] = v4.y;
|
|
|
|
|
|
- customAttribute.array[ offset_custom + 6 ] = v4.x;
|
|
|
|
- customAttribute.array[ offset_custom + 7 ] = v4.y;
|
|
|
|
|
|
+ offset_custom += 8;
|
|
|
|
|
|
- offset_custom += 8;
|
|
|
|
|
|
+ }
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ } else if ( customAttribute.size === 3 ) {
|
|
|
|
|
|
- } else if ( customAttribute.size === 3 ) {
|
|
|
|
|
|
+ var pp;
|
|
|
|
|
|
- var pp;
|
|
|
|
|
|
+ if ( customAttribute.type === "c" ) {
|
|
|
|
|
|
- if ( customAttribute.type === "c" ) {
|
|
|
|
|
|
+ pp = [ "r", "g", "b" ];
|
|
|
|
|
|
- pp = [ "r", "g", "b" ];
|
|
|
|
|
|
+ } else {
|
|
|
|
|
|
- } else {
|
|
|
|
|
|
+ pp = [ "x", "y", "z" ];
|
|
|
|
|
|
- pp = [ "x", "y", "z" ];
|
|
|
|
|
|
+ }
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ if ( customAttribute.boundTo === undefined || customAttribute.boundTo === "vertices" ) {
|
|
|
|
|
|
- if ( customAttribute.boundTo === undefined || customAttribute.boundTo === "vertices" ) {
|
|
|
|
|
|
+ for ( f = 0, fl = chunk_faces3.length; f < fl; f ++ ) {
|
|
|
|
|
|
- for ( f = 0, fl = chunk_faces3.length; f < fl; f ++ ) {
|
|
|
|
|
|
+ face = obj_faces[ chunk_faces3[ f ] ];
|
|
|
|
|
|
- face = obj_faces[ chunk_faces3[ f ] ];
|
|
|
|
|
|
+ v1 = customAttribute.value[ face.a ];
|
|
|
|
+ v2 = customAttribute.value[ face.b ];
|
|
|
|
+ v3 = customAttribute.value[ face.c ];
|
|
|
|
|
|
- v1 = customAttribute.value[ face.a ];
|
|
|
|
- v2 = customAttribute.value[ face.b ];
|
|
|
|
- v3 = customAttribute.value[ face.c ];
|
|
|
|
|
|
+ customAttribute.array[ offset_custom ] = v1[ pp[ 0 ] ];
|
|
|
|
+ customAttribute.array[ offset_custom + 1 ] = v1[ pp[ 1 ] ];
|
|
|
|
+ customAttribute.array[ offset_custom + 2 ] = v1[ pp[ 2 ] ];
|
|
|
|
|
|
- customAttribute.array[ offset_custom ] = v1[ pp[ 0 ] ];
|
|
|
|
- customAttribute.array[ offset_custom + 1 ] = v1[ pp[ 1 ] ];
|
|
|
|
- customAttribute.array[ offset_custom + 2 ] = v1[ pp[ 2 ] ];
|
|
|
|
|
|
+ customAttribute.array[ offset_custom + 3 ] = v2[ pp[ 0 ] ];
|
|
|
|
+ customAttribute.array[ offset_custom + 4 ] = v2[ pp[ 1 ] ];
|
|
|
|
+ customAttribute.array[ offset_custom + 5 ] = v2[ pp[ 2 ] ];
|
|
|
|
|
|
- customAttribute.array[ offset_custom + 3 ] = v2[ pp[ 0 ] ];
|
|
|
|
- customAttribute.array[ offset_custom + 4 ] = v2[ pp[ 1 ] ];
|
|
|
|
- customAttribute.array[ offset_custom + 5 ] = v2[ pp[ 2 ] ];
|
|
|
|
|
|
+ customAttribute.array[ offset_custom + 6 ] = v3[ pp[ 0 ] ];
|
|
|
|
+ customAttribute.array[ offset_custom + 7 ] = v3[ pp[ 1 ] ];
|
|
|
|
+ customAttribute.array[ offset_custom + 8 ] = v3[ pp[ 2 ] ];
|
|
|
|
|
|
- customAttribute.array[ offset_custom + 6 ] = v3[ pp[ 0 ] ];
|
|
|
|
- customAttribute.array[ offset_custom + 7 ] = v3[ pp[ 1 ] ];
|
|
|
|
- customAttribute.array[ offset_custom + 8 ] = v3[ pp[ 2 ] ];
|
|
|
|
|
|
+ offset_custom += 9;
|
|
|
|
|
|
- offset_custom += 9;
|
|
|
|
|
|
+ }
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ for ( f = 0, fl = chunk_faces4.length; f < fl; f ++ ) {
|
|
|
|
|
|
- for ( f = 0, fl = chunk_faces4.length; f < fl; f ++ ) {
|
|
|
|
|
|
+ face = obj_faces[ chunk_faces4[ f ] ];
|
|
|
|
|
|
- face = obj_faces[ chunk_faces4[ f ] ];
|
|
|
|
|
|
+ v1 = customAttribute.value[ face.a ];
|
|
|
|
+ v2 = customAttribute.value[ face.b ];
|
|
|
|
+ v3 = customAttribute.value[ face.c ];
|
|
|
|
+ v4 = customAttribute.value[ face.d ];
|
|
|
|
|
|
- v1 = customAttribute.value[ face.a ];
|
|
|
|
- v2 = customAttribute.value[ face.b ];
|
|
|
|
- v3 = customAttribute.value[ face.c ];
|
|
|
|
- v4 = customAttribute.value[ face.d ];
|
|
|
|
|
|
+ customAttribute.array[ offset_custom ] = v1[ pp[ 0 ] ];
|
|
|
|
+ customAttribute.array[ offset_custom + 1 ] = v1[ pp[ 1 ] ];
|
|
|
|
+ customAttribute.array[ offset_custom + 2 ] = v1[ pp[ 2 ] ];
|
|
|
|
|
|
- customAttribute.array[ offset_custom ] = v1[ pp[ 0 ] ];
|
|
|
|
- customAttribute.array[ offset_custom + 1 ] = v1[ pp[ 1 ] ];
|
|
|
|
- customAttribute.array[ offset_custom + 2 ] = v1[ pp[ 2 ] ];
|
|
|
|
|
|
+ customAttribute.array[ offset_custom + 3 ] = v2[ pp[ 0 ] ];
|
|
|
|
+ customAttribute.array[ offset_custom + 4 ] = v2[ pp[ 1 ] ];
|
|
|
|
+ customAttribute.array[ offset_custom + 5 ] = v2[ pp[ 2 ] ];
|
|
|
|
|
|
- customAttribute.array[ offset_custom + 3 ] = v2[ pp[ 0 ] ];
|
|
|
|
- customAttribute.array[ offset_custom + 4 ] = v2[ pp[ 1 ] ];
|
|
|
|
- customAttribute.array[ offset_custom + 5 ] = v2[ pp[ 2 ] ];
|
|
|
|
|
|
+ customAttribute.array[ offset_custom + 6 ] = v3[ pp[ 0 ] ];
|
|
|
|
+ customAttribute.array[ offset_custom + 7 ] = v3[ pp[ 1 ] ];
|
|
|
|
+ customAttribute.array[ offset_custom + 8 ] = v3[ pp[ 2 ] ];
|
|
|
|
|
|
- customAttribute.array[ offset_custom + 6 ] = v3[ pp[ 0 ] ];
|
|
|
|
- customAttribute.array[ offset_custom + 7 ] = v3[ pp[ 1 ] ];
|
|
|
|
- customAttribute.array[ offset_custom + 8 ] = v3[ pp[ 2 ] ];
|
|
|
|
|
|
+ customAttribute.array[ offset_custom + 9 ] = v4[ pp[ 0 ] ];
|
|
|
|
+ customAttribute.array[ offset_custom + 10 ] = v4[ pp[ 1 ] ];
|
|
|
|
+ customAttribute.array[ offset_custom + 11 ] = v4[ pp[ 2 ] ];
|
|
|
|
|
|
- customAttribute.array[ offset_custom + 9 ] = v4[ pp[ 0 ] ];
|
|
|
|
- customAttribute.array[ offset_custom + 10 ] = v4[ pp[ 1 ] ];
|
|
|
|
- customAttribute.array[ offset_custom + 11 ] = v4[ pp[ 2 ] ];
|
|
|
|
|
|
+ offset_custom += 12;
|
|
|
|
|
|
- offset_custom += 12;
|
|
|
|
|
|
+ }
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ } else if ( customAttribute.boundTo === "faces" ) {
|
|
|
|
|
|
- } else if ( customAttribute.boundTo === "faces" ) {
|
|
|
|
|
|
+ for ( f = 0, fl = chunk_faces3.length; f < fl; f ++ ) {
|
|
|
|
|
|
- for ( f = 0, fl = chunk_faces3.length; f < fl; f ++ ) {
|
|
|
|
|
|
+ value = customAttribute.value[ chunk_faces3[ f ] ];
|
|
|
|
|
|
- value = customAttribute.value[ chunk_faces3[ f ] ];
|
|
|
|
|
|
+ v1 = value;
|
|
|
|
+ v2 = value;
|
|
|
|
+ v3 = value;
|
|
|
|
|
|
- v1 = value;
|
|
|
|
- v2 = value;
|
|
|
|
- v3 = value;
|
|
|
|
|
|
+ customAttribute.array[ offset_custom ] = v1[ pp[ 0 ] ];
|
|
|
|
+ customAttribute.array[ offset_custom + 1 ] = v1[ pp[ 1 ] ];
|
|
|
|
+ customAttribute.array[ offset_custom + 2 ] = v1[ pp[ 2 ] ];
|
|
|
|
|
|
- customAttribute.array[ offset_custom ] = v1[ pp[ 0 ] ];
|
|
|
|
- customAttribute.array[ offset_custom + 1 ] = v1[ pp[ 1 ] ];
|
|
|
|
- customAttribute.array[ offset_custom + 2 ] = v1[ pp[ 2 ] ];
|
|
|
|
|
|
+ customAttribute.array[ offset_custom + 3 ] = v2[ pp[ 0 ] ];
|
|
|
|
+ customAttribute.array[ offset_custom + 4 ] = v2[ pp[ 1 ] ];
|
|
|
|
+ customAttribute.array[ offset_custom + 5 ] = v2[ pp[ 2 ] ];
|
|
|
|
|
|
- customAttribute.array[ offset_custom + 3 ] = v2[ pp[ 0 ] ];
|
|
|
|
- customAttribute.array[ offset_custom + 4 ] = v2[ pp[ 1 ] ];
|
|
|
|
- customAttribute.array[ offset_custom + 5 ] = v2[ pp[ 2 ] ];
|
|
|
|
|
|
+ customAttribute.array[ offset_custom + 6 ] = v3[ pp[ 0 ] ];
|
|
|
|
+ customAttribute.array[ offset_custom + 7 ] = v3[ pp[ 1 ] ];
|
|
|
|
+ customAttribute.array[ offset_custom + 8 ] = v3[ pp[ 2 ] ];
|
|
|
|
|
|
- customAttribute.array[ offset_custom + 6 ] = v3[ pp[ 0 ] ];
|
|
|
|
- customAttribute.array[ offset_custom + 7 ] = v3[ pp[ 1 ] ];
|
|
|
|
- customAttribute.array[ offset_custom + 8 ] = v3[ pp[ 2 ] ];
|
|
|
|
|
|
+ offset_custom += 9;
|
|
|
|
|
|
- offset_custom += 9;
|
|
|
|
|
|
+ }
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ for ( f = 0, fl = chunk_faces4.length; f < fl; f ++ ) {
|
|
|
|
|
|
- for ( f = 0, fl = chunk_faces4.length; f < fl; f ++ ) {
|
|
|
|
|
|
+ value = customAttribute.value[ chunk_faces4[ f ] ];
|
|
|
|
|
|
- value = customAttribute.value[ chunk_faces4[ f ] ];
|
|
|
|
|
|
+ v1 = value;
|
|
|
|
+ v2 = value;
|
|
|
|
+ v3 = value;
|
|
|
|
+ v4 = value;
|
|
|
|
|
|
- v1 = value;
|
|
|
|
- v2 = value;
|
|
|
|
- v3 = value;
|
|
|
|
- v4 = value;
|
|
|
|
|
|
+ customAttribute.array[ offset_custom ] = v1[ pp[ 0 ] ];
|
|
|
|
+ customAttribute.array[ offset_custom + 1 ] = v1[ pp[ 1 ] ];
|
|
|
|
+ customAttribute.array[ offset_custom + 2 ] = v1[ pp[ 2 ] ];
|
|
|
|
|
|
- customAttribute.array[ offset_custom ] = v1[ pp[ 0 ] ];
|
|
|
|
- customAttribute.array[ offset_custom + 1 ] = v1[ pp[ 1 ] ];
|
|
|
|
- customAttribute.array[ offset_custom + 2 ] = v1[ pp[ 2 ] ];
|
|
|
|
|
|
+ customAttribute.array[ offset_custom + 3 ] = v2[ pp[ 0 ] ];
|
|
|
|
+ customAttribute.array[ offset_custom + 4 ] = v2[ pp[ 1 ] ];
|
|
|
|
+ customAttribute.array[ offset_custom + 5 ] = v2[ pp[ 2 ] ];
|
|
|
|
|
|
- customAttribute.array[ offset_custom + 3 ] = v2[ pp[ 0 ] ];
|
|
|
|
- customAttribute.array[ offset_custom + 4 ] = v2[ pp[ 1 ] ];
|
|
|
|
- customAttribute.array[ offset_custom + 5 ] = v2[ pp[ 2 ] ];
|
|
|
|
|
|
+ customAttribute.array[ offset_custom + 6 ] = v3[ pp[ 0 ] ];
|
|
|
|
+ customAttribute.array[ offset_custom + 7 ] = v3[ pp[ 1 ] ];
|
|
|
|
+ customAttribute.array[ offset_custom + 8 ] = v3[ pp[ 2 ] ];
|
|
|
|
|
|
- customAttribute.array[ offset_custom + 6 ] = v3[ pp[ 0 ] ];
|
|
|
|
- customAttribute.array[ offset_custom + 7 ] = v3[ pp[ 1 ] ];
|
|
|
|
- customAttribute.array[ offset_custom + 8 ] = v3[ pp[ 2 ] ];
|
|
|
|
|
|
+ customAttribute.array[ offset_custom + 9 ] = v4[ pp[ 0 ] ];
|
|
|
|
+ customAttribute.array[ offset_custom + 10 ] = v4[ pp[ 1 ] ];
|
|
|
|
+ customAttribute.array[ offset_custom + 11 ] = v4[ pp[ 2 ] ];
|
|
|
|
|
|
- customAttribute.array[ offset_custom + 9 ] = v4[ pp[ 0 ] ];
|
|
|
|
- customAttribute.array[ offset_custom + 10 ] = v4[ pp[ 1 ] ];
|
|
|
|
- customAttribute.array[ offset_custom + 11 ] = v4[ pp[ 2 ] ];
|
|
|
|
|
|
+ offset_custom += 12;
|
|
|
|
|
|
- offset_custom += 12;
|
|
|
|
|
|
+ }
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ } else if ( customAttribute.boundTo === "faceVertices" ) {
|
|
|
|
|
|
- } else if ( customAttribute.boundTo === "faceVertices" ) {
|
|
|
|
|
|
+ for ( f = 0, fl = chunk_faces3.length; f < fl; f ++ ) {
|
|
|
|
|
|
- for ( f = 0, fl = chunk_faces3.length; f < fl; f ++ ) {
|
|
|
|
|
|
+ value = customAttribute.value[ chunk_faces3[ f ] ];
|
|
|
|
|
|
- value = customAttribute.value[ chunk_faces3[ f ] ];
|
|
|
|
|
|
+ v1 = value[ 0 ];
|
|
|
|
+ v2 = value[ 1 ];
|
|
|
|
+ v3 = value[ 2 ];
|
|
|
|
|
|
- v1 = value[ 0 ];
|
|
|
|
- v2 = value[ 1 ];
|
|
|
|
- v3 = value[ 2 ];
|
|
|
|
|
|
+ customAttribute.array[ offset_custom ] = v1[ pp[ 0 ] ];
|
|
|
|
+ customAttribute.array[ offset_custom + 1 ] = v1[ pp[ 1 ] ];
|
|
|
|
+ customAttribute.array[ offset_custom + 2 ] = v1[ pp[ 2 ] ];
|
|
|
|
|
|
- customAttribute.array[ offset_custom ] = v1[ pp[ 0 ] ];
|
|
|
|
- customAttribute.array[ offset_custom + 1 ] = v1[ pp[ 1 ] ];
|
|
|
|
- customAttribute.array[ offset_custom + 2 ] = v1[ pp[ 2 ] ];
|
|
|
|
|
|
+ customAttribute.array[ offset_custom + 3 ] = v2[ pp[ 0 ] ];
|
|
|
|
+ customAttribute.array[ offset_custom + 4 ] = v2[ pp[ 1 ] ];
|
|
|
|
+ customAttribute.array[ offset_custom + 5 ] = v2[ pp[ 2 ] ];
|
|
|
|
|
|
- customAttribute.array[ offset_custom + 3 ] = v2[ pp[ 0 ] ];
|
|
|
|
- customAttribute.array[ offset_custom + 4 ] = v2[ pp[ 1 ] ];
|
|
|
|
- customAttribute.array[ offset_custom + 5 ] = v2[ pp[ 2 ] ];
|
|
|
|
|
|
+ customAttribute.array[ offset_custom + 6 ] = v3[ pp[ 0 ] ];
|
|
|
|
+ customAttribute.array[ offset_custom + 7 ] = v3[ pp[ 1 ] ];
|
|
|
|
+ customAttribute.array[ offset_custom + 8 ] = v3[ pp[ 2 ] ];
|
|
|
|
|
|
- customAttribute.array[ offset_custom + 6 ] = v3[ pp[ 0 ] ];
|
|
|
|
- customAttribute.array[ offset_custom + 7 ] = v3[ pp[ 1 ] ];
|
|
|
|
- customAttribute.array[ offset_custom + 8 ] = v3[ pp[ 2 ] ];
|
|
|
|
|
|
+ offset_custom += 9;
|
|
|
|
|
|
- offset_custom += 9;
|
|
|
|
|
|
+ }
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ for ( f = 0, fl = chunk_faces4.length; f < fl; f ++ ) {
|
|
|
|
|
|
- for ( f = 0, fl = chunk_faces4.length; f < fl; f ++ ) {
|
|
|
|
|
|
+ value = customAttribute.value[ chunk_faces4[ f ] ];
|
|
|
|
|
|
- value = customAttribute.value[ chunk_faces4[ f ] ];
|
|
|
|
|
|
+ v1 = value[ 0 ];
|
|
|
|
+ v2 = value[ 1 ];
|
|
|
|
+ v3 = value[ 2 ];
|
|
|
|
+ v4 = value[ 3 ];
|
|
|
|
|
|
- v1 = value[ 0 ];
|
|
|
|
- v2 = value[ 1 ];
|
|
|
|
- v3 = value[ 2 ];
|
|
|
|
- v4 = value[ 3 ];
|
|
|
|
|
|
+ customAttribute.array[ offset_custom ] = v1[ pp[ 0 ] ];
|
|
|
|
+ customAttribute.array[ offset_custom + 1 ] = v1[ pp[ 1 ] ];
|
|
|
|
+ customAttribute.array[ offset_custom + 2 ] = v1[ pp[ 2 ] ];
|
|
|
|
|
|
- customAttribute.array[ offset_custom ] = v1[ pp[ 0 ] ];
|
|
|
|
- customAttribute.array[ offset_custom + 1 ] = v1[ pp[ 1 ] ];
|
|
|
|
- customAttribute.array[ offset_custom + 2 ] = v1[ pp[ 2 ] ];
|
|
|
|
|
|
+ customAttribute.array[ offset_custom + 3 ] = v2[ pp[ 0 ] ];
|
|
|
|
+ customAttribute.array[ offset_custom + 4 ] = v2[ pp[ 1 ] ];
|
|
|
|
+ customAttribute.array[ offset_custom + 5 ] = v2[ pp[ 2 ] ];
|
|
|
|
|
|
- customAttribute.array[ offset_custom + 3 ] = v2[ pp[ 0 ] ];
|
|
|
|
- customAttribute.array[ offset_custom + 4 ] = v2[ pp[ 1 ] ];
|
|
|
|
- customAttribute.array[ offset_custom + 5 ] = v2[ pp[ 2 ] ];
|
|
|
|
|
|
+ customAttribute.array[ offset_custom + 6 ] = v3[ pp[ 0 ] ];
|
|
|
|
+ customAttribute.array[ offset_custom + 7 ] = v3[ pp[ 1 ] ];
|
|
|
|
+ customAttribute.array[ offset_custom + 8 ] = v3[ pp[ 2 ] ];
|
|
|
|
|
|
- customAttribute.array[ offset_custom + 6 ] = v3[ pp[ 0 ] ];
|
|
|
|
- customAttribute.array[ offset_custom + 7 ] = v3[ pp[ 1 ] ];
|
|
|
|
- customAttribute.array[ offset_custom + 8 ] = v3[ pp[ 2 ] ];
|
|
|
|
|
|
+ customAttribute.array[ offset_custom + 9 ] = v4[ pp[ 0 ] ];
|
|
|
|
+ customAttribute.array[ offset_custom + 10 ] = v4[ pp[ 1 ] ];
|
|
|
|
+ customAttribute.array[ offset_custom + 11 ] = v4[ pp[ 2 ] ];
|
|
|
|
|
|
- customAttribute.array[ offset_custom + 9 ] = v4[ pp[ 0 ] ];
|
|
|
|
- customAttribute.array[ offset_custom + 10 ] = v4[ pp[ 1 ] ];
|
|
|
|
- customAttribute.array[ offset_custom + 11 ] = v4[ pp[ 2 ] ];
|
|
|
|
|
|
+ offset_custom += 12;
|
|
|
|
|
|
- offset_custom += 12;
|
|
|
|
|
|
+ }
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ } else if ( customAttribute.size === 4 ) {
|
|
|
|
|
|
- } else if ( customAttribute.size === 4 ) {
|
|
|
|
|
|
+ if ( customAttribute.boundTo === undefined || customAttribute.boundTo === "vertices" ) {
|
|
|
|
|
|
- if ( customAttribute.boundTo === undefined || customAttribute.boundTo === "vertices" ) {
|
|
|
|
|
|
+ for ( f = 0, fl = chunk_faces3.length; f < fl; f ++ ) {
|
|
|
|
|
|
- for ( f = 0, fl = chunk_faces3.length; f < fl; f ++ ) {
|
|
|
|
|
|
+ face = obj_faces[ chunk_faces3[ f ] ];
|
|
|
|
|
|
- face = obj_faces[ chunk_faces3[ f ] ];
|
|
|
|
|
|
+ v1 = customAttribute.value[ face.a ];
|
|
|
|
+ v2 = customAttribute.value[ face.b ];
|
|
|
|
+ v3 = customAttribute.value[ face.c ];
|
|
|
|
|
|
- v1 = customAttribute.value[ face.a ];
|
|
|
|
- v2 = customAttribute.value[ face.b ];
|
|
|
|
- v3 = customAttribute.value[ face.c ];
|
|
|
|
|
|
+ customAttribute.array[ offset_custom ] = v1.x;
|
|
|
|
+ customAttribute.array[ offset_custom + 1 ] = v1.y;
|
|
|
|
+ customAttribute.array[ offset_custom + 2 ] = v1.z;
|
|
|
|
+ customAttribute.array[ offset_custom + 3 ] = v1.w;
|
|
|
|
|
|
- customAttribute.array[ offset_custom ] = v1.x;
|
|
|
|
- customAttribute.array[ offset_custom + 1 ] = v1.y;
|
|
|
|
- customAttribute.array[ offset_custom + 2 ] = v1.z;
|
|
|
|
- customAttribute.array[ offset_custom + 3 ] = v1.w;
|
|
|
|
|
|
+ customAttribute.array[ offset_custom + 4 ] = v2.x;
|
|
|
|
+ customAttribute.array[ offset_custom + 5 ] = v2.y;
|
|
|
|
+ customAttribute.array[ offset_custom + 6 ] = v2.z;
|
|
|
|
+ customAttribute.array[ offset_custom + 7 ] = v2.w;
|
|
|
|
|
|
- customAttribute.array[ offset_custom + 4 ] = v2.x;
|
|
|
|
- customAttribute.array[ offset_custom + 5 ] = v2.y;
|
|
|
|
- customAttribute.array[ offset_custom + 6 ] = v2.z;
|
|
|
|
- customAttribute.array[ offset_custom + 7 ] = v2.w;
|
|
|
|
|
|
+ customAttribute.array[ offset_custom + 8 ] = v3.x;
|
|
|
|
+ customAttribute.array[ offset_custom + 9 ] = v3.y;
|
|
|
|
+ customAttribute.array[ offset_custom + 10 ] = v3.z;
|
|
|
|
+ customAttribute.array[ offset_custom + 11 ] = v3.w;
|
|
|
|
|
|
- customAttribute.array[ offset_custom + 8 ] = v3.x;
|
|
|
|
- customAttribute.array[ offset_custom + 9 ] = v3.y;
|
|
|
|
- customAttribute.array[ offset_custom + 10 ] = v3.z;
|
|
|
|
- customAttribute.array[ offset_custom + 11 ] = v3.w;
|
|
|
|
|
|
+ offset_custom += 12;
|
|
|
|
|
|
- offset_custom += 12;
|
|
|
|
|
|
+ }
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ for ( f = 0, fl = chunk_faces4.length; f < fl; f ++ ) {
|
|
|
|
|
|
- for ( f = 0, fl = chunk_faces4.length; f < fl; f ++ ) {
|
|
|
|
|
|
+ face = obj_faces[ chunk_faces4[ f ] ];
|
|
|
|
|
|
- face = obj_faces[ chunk_faces4[ f ] ];
|
|
|
|
|
|
+ v1 = customAttribute.value[ face.a ];
|
|
|
|
+ v2 = customAttribute.value[ face.b ];
|
|
|
|
+ v3 = customAttribute.value[ face.c ];
|
|
|
|
+ v4 = customAttribute.value[ face.d ];
|
|
|
|
|
|
- v1 = customAttribute.value[ face.a ];
|
|
|
|
- v2 = customAttribute.value[ face.b ];
|
|
|
|
- v3 = customAttribute.value[ face.c ];
|
|
|
|
- v4 = customAttribute.value[ face.d ];
|
|
|
|
|
|
+ customAttribute.array[ offset_custom ] = v1.x;
|
|
|
|
+ customAttribute.array[ offset_custom + 1 ] = v1.y;
|
|
|
|
+ customAttribute.array[ offset_custom + 2 ] = v1.z;
|
|
|
|
+ customAttribute.array[ offset_custom + 3 ] = v1.w;
|
|
|
|
|
|
- customAttribute.array[ offset_custom ] = v1.x;
|
|
|
|
- customAttribute.array[ offset_custom + 1 ] = v1.y;
|
|
|
|
- customAttribute.array[ offset_custom + 2 ] = v1.z;
|
|
|
|
- customAttribute.array[ offset_custom + 3 ] = v1.w;
|
|
|
|
|
|
+ customAttribute.array[ offset_custom + 4 ] = v2.x;
|
|
|
|
+ customAttribute.array[ offset_custom + 5 ] = v2.y;
|
|
|
|
+ customAttribute.array[ offset_custom + 6 ] = v2.z;
|
|
|
|
+ customAttribute.array[ offset_custom + 7 ] = v2.w;
|
|
|
|
|
|
- customAttribute.array[ offset_custom + 4 ] = v2.x;
|
|
|
|
- customAttribute.array[ offset_custom + 5 ] = v2.y;
|
|
|
|
- customAttribute.array[ offset_custom + 6 ] = v2.z;
|
|
|
|
- customAttribute.array[ offset_custom + 7 ] = v2.w;
|
|
|
|
|
|
+ customAttribute.array[ offset_custom + 8 ] = v3.x;
|
|
|
|
+ customAttribute.array[ offset_custom + 9 ] = v3.y;
|
|
|
|
+ customAttribute.array[ offset_custom + 10 ] = v3.z;
|
|
|
|
+ customAttribute.array[ offset_custom + 11 ] = v3.w;
|
|
|
|
|
|
- customAttribute.array[ offset_custom + 8 ] = v3.x;
|
|
|
|
- customAttribute.array[ offset_custom + 9 ] = v3.y;
|
|
|
|
- customAttribute.array[ offset_custom + 10 ] = v3.z;
|
|
|
|
- customAttribute.array[ offset_custom + 11 ] = v3.w;
|
|
|
|
|
|
+ customAttribute.array[ offset_custom + 12 ] = v4.x;
|
|
|
|
+ customAttribute.array[ offset_custom + 13 ] = v4.y;
|
|
|
|
+ customAttribute.array[ offset_custom + 14 ] = v4.z;
|
|
|
|
+ customAttribute.array[ offset_custom + 15 ] = v4.w;
|
|
|
|
|
|
- customAttribute.array[ offset_custom + 12 ] = v4.x;
|
|
|
|
- customAttribute.array[ offset_custom + 13 ] = v4.y;
|
|
|
|
- customAttribute.array[ offset_custom + 14 ] = v4.z;
|
|
|
|
- customAttribute.array[ offset_custom + 15 ] = v4.w;
|
|
|
|
|
|
+ offset_custom += 16;
|
|
|
|
|
|
- offset_custom += 16;
|
|
|
|
|
|
+ }
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ } else if ( customAttribute.boundTo === "faces" ) {
|
|
|
|
|
|
- } else if ( customAttribute.boundTo === "faces" ) {
|
|
|
|
|
|
+ for ( f = 0, fl = chunk_faces3.length; f < fl; f ++ ) {
|
|
|
|
|
|
- for ( f = 0, fl = chunk_faces3.length; f < fl; f ++ ) {
|
|
|
|
|
|
+ value = customAttribute.value[ chunk_faces3[ f ] ];
|
|
|
|
|
|
- value = customAttribute.value[ chunk_faces3[ f ] ];
|
|
|
|
|
|
+ v1 = value;
|
|
|
|
+ v2 = value;
|
|
|
|
+ v3 = value;
|
|
|
|
|
|
- v1 = value;
|
|
|
|
- v2 = value;
|
|
|
|
- v3 = value;
|
|
|
|
|
|
+ customAttribute.array[ offset_custom ] = v1.x;
|
|
|
|
+ customAttribute.array[ offset_custom + 1 ] = v1.y;
|
|
|
|
+ customAttribute.array[ offset_custom + 2 ] = v1.z;
|
|
|
|
+ customAttribute.array[ offset_custom + 3 ] = v1.w;
|
|
|
|
|
|
- customAttribute.array[ offset_custom ] = v1.x;
|
|
|
|
- customAttribute.array[ offset_custom + 1 ] = v1.y;
|
|
|
|
- customAttribute.array[ offset_custom + 2 ] = v1.z;
|
|
|
|
- customAttribute.array[ offset_custom + 3 ] = v1.w;
|
|
|
|
|
|
+ customAttribute.array[ offset_custom + 4 ] = v2.x;
|
|
|
|
+ customAttribute.array[ offset_custom + 5 ] = v2.y;
|
|
|
|
+ customAttribute.array[ offset_custom + 6 ] = v2.z;
|
|
|
|
+ customAttribute.array[ offset_custom + 7 ] = v2.w;
|
|
|
|
|
|
- customAttribute.array[ offset_custom + 4 ] = v2.x;
|
|
|
|
- customAttribute.array[ offset_custom + 5 ] = v2.y;
|
|
|
|
- customAttribute.array[ offset_custom + 6 ] = v2.z;
|
|
|
|
- customAttribute.array[ offset_custom + 7 ] = v2.w;
|
|
|
|
|
|
+ customAttribute.array[ offset_custom + 8 ] = v3.x;
|
|
|
|
+ customAttribute.array[ offset_custom + 9 ] = v3.y;
|
|
|
|
+ customAttribute.array[ offset_custom + 10 ] = v3.z;
|
|
|
|
+ customAttribute.array[ offset_custom + 11 ] = v3.w;
|
|
|
|
|
|
- customAttribute.array[ offset_custom + 8 ] = v3.x;
|
|
|
|
- customAttribute.array[ offset_custom + 9 ] = v3.y;
|
|
|
|
- customAttribute.array[ offset_custom + 10 ] = v3.z;
|
|
|
|
- customAttribute.array[ offset_custom + 11 ] = v3.w;
|
|
|
|
|
|
+ offset_custom += 12;
|
|
|
|
|
|
- offset_custom += 12;
|
|
|
|
|
|
+ }
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ for ( f = 0, fl = chunk_faces4.length; f < fl; f ++ ) {
|
|
|
|
|
|
- for ( f = 0, fl = chunk_faces4.length; f < fl; f ++ ) {
|
|
|
|
|
|
+ value = customAttribute.value[ chunk_faces4[ f ] ];
|
|
|
|
|
|
- value = customAttribute.value[ chunk_faces4[ f ] ];
|
|
|
|
|
|
+ v1 = value;
|
|
|
|
+ v2 = value;
|
|
|
|
+ v3 = value;
|
|
|
|
+ v4 = value;
|
|
|
|
|
|
- v1 = value;
|
|
|
|
- v2 = value;
|
|
|
|
- v3 = value;
|
|
|
|
- v4 = value;
|
|
|
|
|
|
+ customAttribute.array[ offset_custom ] = v1.x;
|
|
|
|
+ customAttribute.array[ offset_custom + 1 ] = v1.y;
|
|
|
|
+ customAttribute.array[ offset_custom + 2 ] = v1.z;
|
|
|
|
+ customAttribute.array[ offset_custom + 3 ] = v1.w;
|
|
|
|
|
|
- customAttribute.array[ offset_custom ] = v1.x;
|
|
|
|
- customAttribute.array[ offset_custom + 1 ] = v1.y;
|
|
|
|
- customAttribute.array[ offset_custom + 2 ] = v1.z;
|
|
|
|
- customAttribute.array[ offset_custom + 3 ] = v1.w;
|
|
|
|
|
|
+ customAttribute.array[ offset_custom + 4 ] = v2.x;
|
|
|
|
+ customAttribute.array[ offset_custom + 5 ] = v2.y;
|
|
|
|
+ customAttribute.array[ offset_custom + 6 ] = v2.z;
|
|
|
|
+ customAttribute.array[ offset_custom + 7 ] = v2.w;
|
|
|
|
|
|
- customAttribute.array[ offset_custom + 4 ] = v2.x;
|
|
|
|
- customAttribute.array[ offset_custom + 5 ] = v2.y;
|
|
|
|
- customAttribute.array[ offset_custom + 6 ] = v2.z;
|
|
|
|
- customAttribute.array[ offset_custom + 7 ] = v2.w;
|
|
|
|
|
|
+ customAttribute.array[ offset_custom + 8 ] = v3.x;
|
|
|
|
+ customAttribute.array[ offset_custom + 9 ] = v3.y;
|
|
|
|
+ customAttribute.array[ offset_custom + 10 ] = v3.z;
|
|
|
|
+ customAttribute.array[ offset_custom + 11 ] = v3.w;
|
|
|
|
|
|
- customAttribute.array[ offset_custom + 8 ] = v3.x;
|
|
|
|
- customAttribute.array[ offset_custom + 9 ] = v3.y;
|
|
|
|
- customAttribute.array[ offset_custom + 10 ] = v3.z;
|
|
|
|
- customAttribute.array[ offset_custom + 11 ] = v3.w;
|
|
|
|
|
|
+ customAttribute.array[ offset_custom + 12 ] = v4.x;
|
|
|
|
+ customAttribute.array[ offset_custom + 13 ] = v4.y;
|
|
|
|
+ customAttribute.array[ offset_custom + 14 ] = v4.z;
|
|
|
|
+ customAttribute.array[ offset_custom + 15 ] = v4.w;
|
|
|
|
|
|
- customAttribute.array[ offset_custom + 12 ] = v4.x;
|
|
|
|
- customAttribute.array[ offset_custom + 13 ] = v4.y;
|
|
|
|
- customAttribute.array[ offset_custom + 14 ] = v4.z;
|
|
|
|
- customAttribute.array[ offset_custom + 15 ] = v4.w;
|
|
|
|
|
|
+ offset_custom += 16;
|
|
|
|
|
|
- offset_custom += 16;
|
|
|
|
|
|
+ }
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ } else if ( customAttribute.boundTo === "faceVertices" ) {
|
|
|
|
|
|
- } else if ( customAttribute.boundTo === "faceVertices" ) {
|
|
|
|
|
|
+ for ( f = 0, fl = chunk_faces3.length; f < fl; f ++ ) {
|
|
|
|
|
|
- for ( f = 0, fl = chunk_faces3.length; f < fl; f ++ ) {
|
|
|
|
|
|
+ value = customAttribute.value[ chunk_faces3[ f ] ];
|
|
|
|
|
|
- value = customAttribute.value[ chunk_faces3[ f ] ];
|
|
|
|
|
|
+ v1 = value[ 0 ];
|
|
|
|
+ v2 = value[ 1 ];
|
|
|
|
+ v3 = value[ 2 ];
|
|
|
|
|
|
- v1 = value[ 0 ];
|
|
|
|
- v2 = value[ 1 ];
|
|
|
|
- v3 = value[ 2 ];
|
|
|
|
|
|
+ customAttribute.array[ offset_custom ] = v1.x;
|
|
|
|
+ customAttribute.array[ offset_custom + 1 ] = v1.y;
|
|
|
|
+ customAttribute.array[ offset_custom + 2 ] = v1.z;
|
|
|
|
+ customAttribute.array[ offset_custom + 3 ] = v1.w;
|
|
|
|
|
|
- customAttribute.array[ offset_custom ] = v1.x;
|
|
|
|
- customAttribute.array[ offset_custom + 1 ] = v1.y;
|
|
|
|
- customAttribute.array[ offset_custom + 2 ] = v1.z;
|
|
|
|
- customAttribute.array[ offset_custom + 3 ] = v1.w;
|
|
|
|
|
|
+ customAttribute.array[ offset_custom + 4 ] = v2.x;
|
|
|
|
+ customAttribute.array[ offset_custom + 5 ] = v2.y;
|
|
|
|
+ customAttribute.array[ offset_custom + 6 ] = v2.z;
|
|
|
|
+ customAttribute.array[ offset_custom + 7 ] = v2.w;
|
|
|
|
|
|
- customAttribute.array[ offset_custom + 4 ] = v2.x;
|
|
|
|
- customAttribute.array[ offset_custom + 5 ] = v2.y;
|
|
|
|
- customAttribute.array[ offset_custom + 6 ] = v2.z;
|
|
|
|
- customAttribute.array[ offset_custom + 7 ] = v2.w;
|
|
|
|
|
|
+ customAttribute.array[ offset_custom + 8 ] = v3.x;
|
|
|
|
+ customAttribute.array[ offset_custom + 9 ] = v3.y;
|
|
|
|
+ customAttribute.array[ offset_custom + 10 ] = v3.z;
|
|
|
|
+ customAttribute.array[ offset_custom + 11 ] = v3.w;
|
|
|
|
|
|
- customAttribute.array[ offset_custom + 8 ] = v3.x;
|
|
|
|
- customAttribute.array[ offset_custom + 9 ] = v3.y;
|
|
|
|
- customAttribute.array[ offset_custom + 10 ] = v3.z;
|
|
|
|
- customAttribute.array[ offset_custom + 11 ] = v3.w;
|
|
|
|
|
|
+ offset_custom += 12;
|
|
|
|
|
|
- offset_custom += 12;
|
|
|
|
|
|
+ }
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ for ( f = 0, fl = chunk_faces4.length; f < fl; f ++ ) {
|
|
|
|
|
|
- for ( f = 0, fl = chunk_faces4.length; f < fl; f ++ ) {
|
|
|
|
|
|
+ value = customAttribute.value[ chunk_faces4[ f ] ];
|
|
|
|
|
|
- value = customAttribute.value[ chunk_faces4[ f ] ];
|
|
|
|
|
|
+ v1 = value[ 0 ];
|
|
|
|
+ v2 = value[ 1 ];
|
|
|
|
+ v3 = value[ 2 ];
|
|
|
|
+ v4 = value[ 3 ];
|
|
|
|
|
|
- v1 = value[ 0 ];
|
|
|
|
- v2 = value[ 1 ];
|
|
|
|
- v3 = value[ 2 ];
|
|
|
|
- v4 = value[ 3 ];
|
|
|
|
|
|
+ customAttribute.array[ offset_custom ] = v1.x;
|
|
|
|
+ customAttribute.array[ offset_custom + 1 ] = v1.y;
|
|
|
|
+ customAttribute.array[ offset_custom + 2 ] = v1.z;
|
|
|
|
+ customAttribute.array[ offset_custom + 3 ] = v1.w;
|
|
|
|
|
|
- customAttribute.array[ offset_custom ] = v1.x;
|
|
|
|
- customAttribute.array[ offset_custom + 1 ] = v1.y;
|
|
|
|
- customAttribute.array[ offset_custom + 2 ] = v1.z;
|
|
|
|
- customAttribute.array[ offset_custom + 3 ] = v1.w;
|
|
|
|
|
|
+ customAttribute.array[ offset_custom + 4 ] = v2.x;
|
|
|
|
+ customAttribute.array[ offset_custom + 5 ] = v2.y;
|
|
|
|
+ customAttribute.array[ offset_custom + 6 ] = v2.z;
|
|
|
|
+ customAttribute.array[ offset_custom + 7 ] = v2.w;
|
|
|
|
|
|
- customAttribute.array[ offset_custom + 4 ] = v2.x;
|
|
|
|
- customAttribute.array[ offset_custom + 5 ] = v2.y;
|
|
|
|
- customAttribute.array[ offset_custom + 6 ] = v2.z;
|
|
|
|
- customAttribute.array[ offset_custom + 7 ] = v2.w;
|
|
|
|
|
|
+ customAttribute.array[ offset_custom + 8 ] = v3.x;
|
|
|
|
+ customAttribute.array[ offset_custom + 9 ] = v3.y;
|
|
|
|
+ customAttribute.array[ offset_custom + 10 ] = v3.z;
|
|
|
|
+ customAttribute.array[ offset_custom + 11 ] = v3.w;
|
|
|
|
|
|
- customAttribute.array[ offset_custom + 8 ] = v3.x;
|
|
|
|
- customAttribute.array[ offset_custom + 9 ] = v3.y;
|
|
|
|
- customAttribute.array[ offset_custom + 10 ] = v3.z;
|
|
|
|
- customAttribute.array[ offset_custom + 11 ] = v3.w;
|
|
|
|
|
|
+ customAttribute.array[ offset_custom + 12 ] = v4.x;
|
|
|
|
+ customAttribute.array[ offset_custom + 13 ] = v4.y;
|
|
|
|
+ customAttribute.array[ offset_custom + 14 ] = v4.z;
|
|
|
|
+ customAttribute.array[ offset_custom + 15 ] = v4.w;
|
|
|
|
|
|
- customAttribute.array[ offset_custom + 12 ] = v4.x;
|
|
|
|
- customAttribute.array[ offset_custom + 13 ] = v4.y;
|
|
|
|
- customAttribute.array[ offset_custom + 14 ] = v4.z;
|
|
|
|
- customAttribute.array[ offset_custom + 15 ] = v4.w;
|
|
|
|
|
|
+ offset_custom += 16;
|
|
|
|
|
|
- offset_custom += 16;
|
|
|
|
|
|
+ }
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ renderer.setDynamicArrayBuffer( customAttribute.buffer, customAttribute.array);
|
|
|
|
|
|
- renderer.setDynamicArrayBuffer( customAttribute.buffer, customAttribute.array);
|
|
|
|
|
|
+ }
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ if ( dispose ) {
|
|
|
|
|
|
- if ( dispose ) {
|
|
|
|
|
|
+ delete geometryGroup.__inittedArrays;
|
|
|
|
+ delete geometryGroup.__colorArray;
|
|
|
|
+ delete geometryGroup.__normalArray;
|
|
|
|
+ delete geometryGroup.__tangentArray;
|
|
|
|
+ delete geometryGroup.__uvArray;
|
|
|
|
+ delete geometryGroup.__uv2Array;
|
|
|
|
+ delete geometryGroup.__faceArray;
|
|
|
|
+ delete geometryGroup.__vertexArray;
|
|
|
|
+ delete geometryGroup.__lineArray;
|
|
|
|
+ delete geometryGroup.__skinIndexArray;
|
|
|
|
+ delete geometryGroup.__skinWeightArray;
|
|
|
|
|
|
- delete geometryGroup.__inittedArrays;
|
|
|
|
- delete geometryGroup.__colorArray;
|
|
|
|
- delete geometryGroup.__normalArray;
|
|
|
|
- delete geometryGroup.__tangentArray;
|
|
|
|
- delete geometryGroup.__uvArray;
|
|
|
|
- delete geometryGroup.__uv2Array;
|
|
|
|
- delete geometryGroup.__faceArray;
|
|
|
|
- delete geometryGroup.__vertexArray;
|
|
|
|
- delete geometryGroup.__lineArray;
|
|
|
|
- delete geometryGroup.__skinIndexArray;
|
|
|
|
- delete geometryGroup.__skinWeightArray;
|
|
|
|
|
|
+ }
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
-};
|
|
|
|
|
|
+} );
|