From 6119bda7157f7fbc2b42ff633f793ba26cbfc18c Mon Sep 17 00:00:00 2001 From: "Mr.doob" Date: Tue, 23 Jul 2013 01:43:27 +0200 Subject: [PATCH] Added Face/Vertex Colors handling to BufferGeometryUtils.fromGeometry. --- examples/js/BufferGeometryUtils.js | 97 ++++++++++++++++++++++++++---- 1 file changed, 86 insertions(+), 11 deletions(-) diff --git a/examples/js/BufferGeometryUtils.js b/examples/js/BufferGeometryUtils.js index 2f1b86ff98..e144b24039 100644 --- a/examples/js/BufferGeometryUtils.js +++ b/examples/js/BufferGeometryUtils.js @@ -5,11 +5,14 @@ THREE.BufferGeometryUtils = { - fromGeometry: function geometryToBufferGeometry( geometry ) { + fromGeometry: function geometryToBufferGeometry( geometry, settings ) { + + settings = settings || { 'vertexColors': THREE.NoColors }; var vertices = geometry.vertices; var faces = geometry.faces; var faceVertexUvs = geometry.faceVertexUvs; + var vertexColors = settings.vertexColors; var hasFaceVertexUv = faceVertexUvs[ 0 ].length > 0; var triangles = 0; @@ -20,8 +23,6 @@ THREE.BufferGeometryUtils = { } - console.log( faces.length, triangles ); - var bufferGeometry = new THREE.BufferGeometry(); bufferGeometry.attributes = { @@ -34,11 +35,20 @@ THREE.BufferGeometryUtils = { itemSize: 3, array: new Float32Array( triangles * 3 * 3 ) } - /* - color: { + + } + + var positions = bufferGeometry.attributes.position.array; + var normals = bufferGeometry.attributes.normal.array; + + if ( vertexColors !== THREE.NoColors ) { + + bufferGeometry.attributes.color = { itemSize: 3, array: new Float32Array( triangles * 3 * 3 ) - }*/ + }; + + var colors = bufferGeometry.attributes.color.array; } @@ -53,10 +63,6 @@ THREE.BufferGeometryUtils = { } - var positions = bufferGeometry.attributes.position.array; - var normals = bufferGeometry.attributes.normal.array; - // var colors = bufferGeometry.attributes.color.array; - var i2 = 0, i3 = 0; for ( var i = 0; i < faces.length; i ++ ) { @@ -95,6 +101,42 @@ THREE.BufferGeometryUtils = { normals[ i3 + 7 ] = nc.y; normals[ i3 + 8 ] = nc.z; + if ( vertexColors === THREE.FaceColors ) { + + var fc = face.color; + + colors[ i3 ] = fc.r; + colors[ i3 + 1 ] = fc.g; + colors[ i3 + 2 ] = fc.b; + + colors[ i3 + 3 ] = fc.r; + colors[ i3 + 4 ] = fc.g; + colors[ i3 + 5 ] = fc.b; + + colors[ i3 + 6 ] = fc.r; + colors[ i3 + 7 ] = fc.g; + colors[ i3 + 8 ] = fc.b; + + } else if ( vertexColors === THREE.VertexColors ) { + + var vca = face.vertexColors[ 0 ]; + var vcb = face.vertexColors[ 1 ]; + var vcc = face.vertexColors[ 2 ]; + + colors[ i3 ] = vca.r; + colors[ i3 + 1 ] = vca.g; + colors[ i3 + 2 ] = vca.b; + + colors[ i3 + 3 ] = vcb.r; + colors[ i3 + 4 ] = vcb.g; + colors[ i3 + 5 ] = vcb.b; + + colors[ i3 + 6 ] = vcc.r; + colors[ i3 + 7 ] = vcc.g; + colors[ i3 + 8 ] = vcc.b; + + } + if ( hasFaceVertexUv === true ) { var uva = faceVertexUvs[ 0 ][ i ][ 0 ]; @@ -118,7 +160,6 @@ THREE.BufferGeometryUtils = { if ( face instanceof THREE.Face4 ) { var d = vertices[ face.d ]; - var nd = face.vertexNormals[ 3 ]; positions[ i3 ] = a.x; positions[ i3 + 1 ] = a.y; @@ -132,6 +173,8 @@ THREE.BufferGeometryUtils = { positions[ i3 + 7 ] = d.y; positions[ i3 + 8 ] = d.z; + var nd = face.vertexNormals[ 3 ]; + normals[ i3 ] = na.x; normals[ i3 + 1 ] = na.y; normals[ i3 + 2 ] = na.z; @@ -144,6 +187,38 @@ THREE.BufferGeometryUtils = { normals[ i3 + 7 ] = nd.y; normals[ i3 + 8 ] = nd.z; + if ( vertexColors === THREE.FaceColors ) { + + colors[ i3 ] = fc.r; + colors[ i3 + 1 ] = fc.g; + colors[ i3 + 2 ] = fc.b; + + colors[ i3 + 3 ] = fc.r; + colors[ i3 + 4 ] = fc.g; + colors[ i3 + 5 ] = fc.b; + + colors[ i3 + 6 ] = fc.r; + colors[ i3 + 7 ] = fc.g; + colors[ i3 + 8 ] = fc.b; + + } else if ( vertexColors === THREE.VertexColors ) { + + var vcd = face.vertexColors[ 3 ]; + + colors[ i3 ] = vca.r; + colors[ i3 + 1 ] = vca.g; + colors[ i3 + 2 ] = vca.b; + + colors[ i3 + 3 ] = vcc.r; + colors[ i3 + 4 ] = vcc.g; + colors[ i3 + 5 ] = vcc.b; + + colors[ i3 + 6 ] = vcd.r; + colors[ i3 + 7 ] = vcd.g; + colors[ i3 + 8 ] = vcd.b; + + } + if ( hasFaceVertexUv === true ) { var uvd = faceVertexUvs[ 0 ][ i ][ 3 ]; -- GitLab