|
@@ -44,6 +44,8 @@
|
|
|
var camera, scene, renderer1, renderer2;
|
|
|
|
|
|
var mesh1, mesh2, mesh3;
|
|
|
+ var color = new THREE.Color();
|
|
|
+ var vec = new THREE.Vector3();
|
|
|
|
|
|
init();
|
|
|
animate();
|
|
@@ -101,50 +103,43 @@
|
|
|
shadowMesh.rotation.x = - Math.PI / 2;
|
|
|
scene.add( shadowMesh );
|
|
|
|
|
|
- var faceIndices = [ 'a', 'b', 'c' ];
|
|
|
+ var radius = 200;
|
|
|
|
|
|
- var color, f1, f2, f3, p, vertexIndex,
|
|
|
+ var geometry1 = new THREE.IcosahedronBufferGeometry( radius, 1 );
|
|
|
|
|
|
- radius = 200,
|
|
|
+ var count = geometry1.attributes.position.count;
|
|
|
+ geometry1.addAttribute( 'color', new THREE.BufferAttribute( new Float32Array( count * 3 ), 3 ) );
|
|
|
|
|
|
- geometry1 = new THREE.IcosahedronGeometry( radius, 1 ),
|
|
|
- geometry2 = new THREE.IcosahedronGeometry( radius, 1 ),
|
|
|
- geometry3 = new THREE.IcosahedronGeometry( radius, 1 );
|
|
|
+ var geometry2 = geometry1.clone();
|
|
|
+ var geometry3 = geometry1.clone();
|
|
|
|
|
|
- for ( var i = 0; i < geometry1.faces.length; i ++ ) {
|
|
|
+ var positions1 = geometry1.attributes.position;
|
|
|
+ var positions2 = geometry2.attributes.position;
|
|
|
+ var positions3 = geometry3.attributes.position;
|
|
|
+ var colors1 = geometry1.attributes.color;
|
|
|
+ var colors2 = geometry2.attributes.color;
|
|
|
+ var colors3 = geometry3.attributes.color;
|
|
|
|
|
|
- f1 = geometry1.faces[ i ];
|
|
|
- f2 = geometry2.faces[ i ];
|
|
|
- f3 = geometry3.faces[ i ];
|
|
|
+ for ( var i = 0; i < count; i ++ ) {
|
|
|
|
|
|
- for( var j = 0; j < 3; j ++ ) {
|
|
|
+ color.setHSL( ( positions1.getY( i ) / radius + 1 ) / 2, 1.0, 0.5 );
|
|
|
+ colors1.setXYZ( i, color.r, color.g, color.b );
|
|
|
|
|
|
- vertexIndex = f1[ faceIndices[ j ] ];
|
|
|
+ color.setHSL( 0, ( positions2.getY( i ) / radius + 1 ) / 2, 0.5 );
|
|
|
+ colors2.setXYZ( i, color.r, color.g, color.b );
|
|
|
|
|
|
- p = geometry1.vertices[ vertexIndex ];
|
|
|
-
|
|
|
- color = new THREE.Color( 0xffffff );
|
|
|
- color.setHSL( ( p.y / radius + 1 ) / 2, 1.0, 0.5 );
|
|
|
-
|
|
|
- f1.vertexColors[ j ] = color;
|
|
|
-
|
|
|
- color = new THREE.Color( 0xffffff );
|
|
|
- color.setHSL( 0.0, ( p.y / radius + 1 ) / 2, 0.5 );
|
|
|
-
|
|
|
- f2.vertexColors[ j ] = color;
|
|
|
-
|
|
|
- color = new THREE.Color( 0xffffff );
|
|
|
- color.setHSL( 0.125 * vertexIndex / geometry1.vertices.length, 1.0, 0.5 );
|
|
|
-
|
|
|
- f3.vertexColors[ j ] = color;
|
|
|
-
|
|
|
- }
|
|
|
+ color.setRGB( 1, 1, ( positions3.getY( i ) / radius + 1 ) / 2 );
|
|
|
+ colors3.setXYZ( i, color.r, color.g, color.b );
|
|
|
|
|
|
}
|
|
|
|
|
|
- var wireframe;
|
|
|
+ var material = new THREE.MeshPhongMaterial( {
|
|
|
+ color: 0xffffff,
|
|
|
+ flatShading: true,
|
|
|
+ vertexColors: THREE.VertexColors,
|
|
|
+ shininess: 0
|
|
|
+ } );
|
|
|
|
|
|
- var material = new THREE.MeshPhongMaterial( { color: 0xffffff, flatShading: true, vertexColors: THREE.VertexColors, shininess: 0 } );
|
|
|
var wireframeMaterial = new THREE.MeshBasicMaterial( { color: 0x000000, wireframe: true, transparent: true } );
|
|
|
|
|
|
mesh1 = new THREE.Mesh( geometry1, material );
|
|
@@ -189,23 +184,6 @@
|
|
|
mesh2.rotation.z += Math.PI / 500;
|
|
|
mesh3.rotation.z += Math.PI / 500;
|
|
|
|
|
|
- var geometry = mesh3.geometry;
|
|
|
-
|
|
|
- for ( var i = 0; i < geometry.faces.length; i ++ ) {
|
|
|
-
|
|
|
- var f = geometry.faces[ i ];
|
|
|
-
|
|
|
- for ( var j = 0; j < 3; j ++ ) {
|
|
|
-
|
|
|
- var color = f.vertexColors[ j ];
|
|
|
- color.setHex( ( color.getHex() + 0xfdfdfd ) % 0xffffff );
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- geometry.colorsNeedUpdate = true;
|
|
|
-
|
|
|
//
|
|
|
|
|
|
var time = performance.now() / 2000;
|