|
@@ -34,7 +34,7 @@
|
|
|
|
|
|
var F = function( klass, args ) {
|
|
|
|
|
|
- return klass.apply( this, args );
|
|
|
+ return klass.apply( this, args );
|
|
|
|
|
|
};
|
|
|
|
|
@@ -61,7 +61,7 @@
|
|
|
|
|
|
{ type: 'BoxGeometry', args: [ 200, 200, 200, 2, 2, 2, materials ] },
|
|
|
{ type: 'TorusGeometry', args: [ 100, 60, 4, 8, Math.PI*2 ] },
|
|
|
- { type: 'TorusKnotGeometry', args: [ ], scale:0.25, meshScale:4 },
|
|
|
+ { type: 'TorusKnotGeometry', args: [], scale:0.25, meshScale:4 },
|
|
|
{ type: 'SphereGeometry', args: [ 100, 3, 3 ], meshScale:2 },
|
|
|
{ type: 'IcosahedronGeometry', args: [ 100, 1 ], meshScale:2 },
|
|
|
{ type: 'CylinderGeometry', args: [ 25, 75, 200, 8, 3 ]} ,
|
|
@@ -158,10 +158,10 @@
|
|
|
|
|
|
var dropdown = '<select id="dropdown" onchange="switchGeometry(this.value)">';
|
|
|
|
|
|
- for ( i = 0; i < geometriesParams.length; i ++ ) {
|
|
|
+ for ( var i = 0; i < geometriesParams.length; i ++ ) {
|
|
|
dropdown += '<option value="' + i + '"';
|
|
|
|
|
|
- dropdown += (geometryIndex == i) ? ' selected' : '';
|
|
|
+ dropdown += (geometryIndex == i) ? ' selected' : '';
|
|
|
|
|
|
dropdown += '>' + geometriesParams[i].type + '</option>';
|
|
|
}
|
|
@@ -170,27 +170,25 @@
|
|
|
|
|
|
info.innerHTML = 'Drag to spin THREE.' + params.type +
|
|
|
|
|
|
- '<br><br>Subdivisions: ' + subdivisions +
|
|
|
+ '<br><br>Subdivisions: ' + subdivisions +
|
|
|
' <a href="#" onclick="nextSubdivision(1); return false;">more</a>/<a href="#" onclick="nextSubdivision(-1); return false;">less</a>' +
|
|
|
'<br>Geometry: ' + dropdown + ' <a href="#" onclick="nextGeometry();return false;">next</a>' +
|
|
|
'<br><br>Vertices count: before ' + geometry.vertices.length + ' after ' + (smooth.attributes.position.array.length/3) +
|
|
|
'<br>Face count: before ' + geometry.faces.length + ' after ' + (smooth.attributes.position.array.length / 3)
|
|
|
- /* since the result is unindex'd the face count will always be directly related to the vertice count */
|
|
|
- ; //+ params.args;
|
|
|
+
|
|
|
}
|
|
|
|
|
|
function addStuff() {
|
|
|
|
|
|
- if ( cube != false ) {
|
|
|
-
|
|
|
- scene.remove( group );
|
|
|
- scene.remove(cube);
|
|
|
- scene.remove(mesh);
|
|
|
- //mesh.dispose();
|
|
|
- material.dispose();
|
|
|
+ if ( cube !== undefined ) {
|
|
|
+
|
|
|
geometry.dispose();
|
|
|
+ material.dispose();
|
|
|
smooth.dispose();
|
|
|
|
|
|
+ scene.remove( group );
|
|
|
+ scene.remove( cube );
|
|
|
+
|
|
|
}
|
|
|
|
|
|
|
|
@@ -209,53 +207,40 @@
|
|
|
|
|
|
}
|
|
|
|
|
|
- // Cloning original geometry for debuging
|
|
|
+ smooth = modifier.modify( geometry );
|
|
|
|
|
|
- //smooth = geometry.clone(); // removed because the BufferSubdivisionModifier doesn't modify the original object.
|
|
|
+ updateInfo();
|
|
|
|
|
|
- // mergeVertices(); is run in the subdivision modifier
|
|
|
+ var faceABCD = "abcd";
|
|
|
|
|
|
- smooth = modifier.modify( geometry );
|
|
|
+ // var TypedArrayHelper = function (size, registers, register_type, array_type, unit_size, accessors)
|
|
|
+ var colors = new TypedArrayHelper( 0, 1, THREE.Color, Float32Array, 3, [ 'r', 'g', 'b' ] );
|
|
|
|
|
|
- updateInfo();
|
|
|
+ for ( var i = 0; i < smooth.attributes.position.array.length / 3; i ++ ) {
|
|
|
|
|
|
- var faceABCD = "abcd";
|
|
|
-
|
|
|
- var i;
|
|
|
- // var tmp_v = new THREE.Vector3();
|
|
|
- var colors = new TypedArrayHelper(0, 1, THREE.Color, Float32Array, 3, ['r', 'g', 'b']); // var TypedArrayHelper = function (size, registers, register_type, array_type, unit_size, accessors)
|
|
|
- for (i = 0; i < smooth.attributes.position.array.length / 3; i++) {
|
|
|
- // tmp_v.x = smooth.attributes.position.array[i * 3];
|
|
|
- // tmp_v.y = smooth.attributes.position.array[(i * 3)+1];
|
|
|
- // tmp_v.z = smooth.attributes.position.array[(i * 3) + 2];
|
|
|
- colors.register[0].setHSL((smooth.attributes.position.array[(i * 3) + 1] / 200) + 0.5, 1, 0.5);
|
|
|
- colors.push_element(colors.register[0]);
|
|
|
+ var hue = ( smooth.attributes.position.array[ ( i * 3 ) + 1 ] / 200 ) + 0.5;
|
|
|
+ colors.register[ 0 ].setHSL( hue, 1, 0.5 );
|
|
|
+ colors.push_element( colors.register[ 0 ] );
|
|
|
|
|
|
}
|
|
|
- colors.trim_size();
|
|
|
- smooth.addAttribute('color', new THREE.BufferAttribute(colors.buffer,3));
|
|
|
|
|
|
+ colors.trim_size();
|
|
|
+ smooth.addAttribute( 'color', new THREE.BufferAttribute( colors.buffer, 3 ) );
|
|
|
|
|
|
group = new THREE.Group();
|
|
|
scene.add( group );
|
|
|
|
|
|
- material = new THREE.MeshBasicMaterial( { color: 0xfefefe, wireframe: true, opacity: 0.5 } );
|
|
|
+ material = new THREE.MeshBasicMaterial( { color: 0xffffff, wireframe: true } );
|
|
|
mesh = new THREE.Mesh( geometry, material );
|
|
|
group.add( mesh );
|
|
|
|
|
|
var meshmaterials = [
|
|
|
- new THREE.MeshPhongMaterial({ color: 0xffffff, shading: THREE.FlatShading, vertexColors: THREE.VertexColors, shininess: 0 }),
|
|
|
- new THREE.MeshBasicMaterial( { color: 0x405040, wireframe: true, opacity: 0.8, transparent: true } )
|
|
|
+ new THREE.MeshPhongMaterial( { color: 0xffffff, shading: THREE.FlatShading, vertexColors: THREE.VertexColors } ),
|
|
|
+ new THREE.MeshBasicMaterial( { color: 0x000000, wireframe: true, opacity: 0.15, transparent: true } )
|
|
|
];
|
|
|
|
|
|
cube = THREE.SceneUtils.createMultiMaterialObject( smooth, meshmaterials );
|
|
|
-
|
|
|
- var meshScale = params.meshScale ? params.meshScale : 1;
|
|
|
-
|
|
|
- cube.scale.x = meshScale;
|
|
|
- cube.scale.y = meshScale;
|
|
|
- cube.scale.z = meshScale;
|
|
|
-
|
|
|
+ cube.scale.setScalar( params.meshScale ? params.meshScale : 1 );
|
|
|
scene.add( cube );
|
|
|
|
|
|
group.scale.copy( cube.scale );
|
|
@@ -263,7 +248,7 @@
|
|
|
}
|
|
|
|
|
|
function init() {
|
|
|
- cube = false;
|
|
|
+
|
|
|
container = document.createElement( 'div' );
|
|
|
document.body.appendChild( container );
|
|
|
|
|
@@ -286,7 +271,7 @@
|
|
|
|
|
|
addStuff();
|
|
|
|
|
|
- renderer = new THREE.WebGLRenderer( { antialias: true } ); // WebGLRenderer CanvasRenderer
|
|
|
+ renderer = new THREE.WebGLRenderer( { antialias: true } );
|
|
|
renderer.setClearColor( 0xf0f0f0 );
|
|
|
renderer.setPixelRatio( window.devicePixelRatio );
|
|
|
renderer.setSize( window.innerWidth, window.innerHeight );
|
|
@@ -320,8 +305,9 @@
|
|
|
|
|
|
controls.update();
|
|
|
|
|
|
+ stats.begin();
|
|
|
render();
|
|
|
- stats.update();
|
|
|
+ stats.end();
|
|
|
|
|
|
}
|
|
|
|