123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462 |
- /* global QUnit */
- import { Geometry } from '../../../../src/core/Geometry';
- import { BufferAttribute } from '../../../../src/core/BufferAttribute';
- import { BufferGeometry } from '../../../../src/core/BufferGeometry';
- import { BoxBufferGeometry } from '../../../../src/geometries/BoxBufferGeometry';
- import { DodecahedronBufferGeometry } from '../../../../src/geometries/DodecahedronBufferGeometry';
- import { Vector3 } from '../../../../src/math/Vector3';
- import { Matrix4 } from '../../../../src/math/Matrix4';
- import { Face3 } from '../../../../src/core/Face3';
- import {
- x,
- y,
- z,
- eps
- } from '../math/Constants.tests';
- function getGeometryByParams( x1, y1, z1, x2, y2, z2, x3, y3, z3 ) {
- var geometry = new Geometry();
- // a triangle
- geometry.vertices = [
- new Vector3( x1, y1, z1 ),
- new Vector3( x2, y2, z2 ),
- new Vector3( x3, y3, z3 )
- ];
- return geometry;
- }
- function getGeometry() {
- return getGeometryByParams( - 0.5, 0, 0, 0.5, 0, 0, 0, 1, 0 );
- }
- export default QUnit.module( 'Core', () => {
- QUnit.module( 'Geometry', () => {
- // INHERITANCE
- QUnit.todo( "Extending", ( assert ) => {
- assert.ok( false, "everything's gonna be alright" );
- } );
- // INSTANCING
- QUnit.todo( "Instancing", ( assert ) => {
- assert.ok( false, "everything's gonna be alright" );
- } );
- // PUBLIC STUFF
- QUnit.todo( "isGeometry", ( assert ) => {
- assert.ok( false, "everything's gonna be alright" );
- } );
- QUnit.test( "applyMatrix4", ( assert ) => {
- var geometry = getGeometry();
- geometry.faces.push( new Face3( 0, 1, 2 ) );
- var m = new Matrix4();
- var expectedVerts = [
- new Vector3( 1.5, 3, 4 ),
- new Vector3( 2.5, 3, 4 ),
- new Vector3( 2, 3, 5 )
- ];
- var v0, v1, v2;
- m.makeRotationX( Math.PI / 2 );
- m.setPosition( new Vector3( x, y, z ) );
- geometry.applyMatrix4( m );
- v0 = geometry.vertices[ 0 ];
- v1 = geometry.vertices[ 1 ];
- v2 = geometry.vertices[ 2 ];
- assert.ok(
- Math.abs( v0.x - expectedVerts[ 0 ].x ) <= eps &&
- Math.abs( v0.y - expectedVerts[ 0 ].y ) <= eps &&
- Math.abs( v0.z - expectedVerts[ 0 ].z ) <= eps,
- "First vertex is as expected"
- );
- assert.ok(
- Math.abs( v1.x - expectedVerts[ 1 ].x ) <= eps &&
- Math.abs( v1.y - expectedVerts[ 1 ].y ) <= eps &&
- Math.abs( v1.z - expectedVerts[ 1 ].z ) <= eps,
- "Second vertex is as expected"
- );
- assert.ok(
- Math.abs( v2.x - expectedVerts[ 2 ].x ) <= eps &&
- Math.abs( v2.y - expectedVerts[ 2 ].y ) <= eps &&
- Math.abs( v2.z - expectedVerts[ 2 ].z ) <= eps,
- "Third vertex is as expected"
- );
- } );
- QUnit.test( "rotateX", ( assert ) => {
- var geometry = getGeometry();
- var matrix = new Matrix4();
- matrix.makeRotationX( Math.PI / 2 ); // 90 degree
- geometry.applyMatrix4( matrix );
- var v0 = geometry.vertices[ 0 ], v1 = geometry.vertices[ 1 ], v2 = geometry.vertices[ 2 ];
- assert.ok( v0.x === - 0.5 && v0.y === 0 && v0.z === 0, "first vertex was rotated" );
- assert.ok( v1.x === 0.5 && v1.y === 0 && v1.z === 0, "second vertex was rotated" );
- assert.ok( v2.x === 0 && v2.y < Number.EPSILON && v2.z === 1, "third vertex was rotated" );
- } );
- QUnit.test( "rotateY", ( assert ) => {
- var geometry = getGeometry();
- var matrix = new Matrix4();
- matrix.makeRotationY( Math.PI ); // 180 degrees
- geometry.applyMatrix4( matrix );
- var v0 = geometry.vertices[ 0 ], v1 = geometry.vertices[ 1 ], v2 = geometry.vertices[ 2 ];
- assert.ok( v0.x === 0.5 && v0.y === 0 && v0.z < Number.EPSILON, "first vertex was rotated" );
- assert.ok( v1.x === - 0.5 && v1.y === 0 && v1.z < Number.EPSILON, "second vertex was rotated" );
- assert.ok( v2.x === 0 && v2.y === 1 && v2.z === 0, "third vertex was rotated" );
- } );
- QUnit.test( "rotateZ", ( assert ) => {
- var geometry = getGeometry();
- var matrix = new Matrix4();
- matrix.makeRotationZ( Math.PI / 2 * 3 ); // 270 degrees
- geometry.applyMatrix4( matrix );
- var v0 = geometry.vertices[ 0 ], v1 = geometry.vertices[ 1 ], v2 = geometry.vertices[ 2 ];
- assert.ok( v0.x < Number.EPSILON && v0.y === 0.5 && v0.z === 0, "first vertex was rotated" );
- assert.ok( v1.x < Number.EPSILON && v1.y === - 0.5 && v1.z === 0, "second vertex was rotated" );
- assert.ok( v2.x === 1 && v2.y < Number.EPSILON && v2.z === 0, "third vertex was rotated" );
- } );
- QUnit.test( "translate", ( assert ) => {
- var a = getGeometry();
- var expected = [
- new Vector3( - 2.5, 3, - 4 ),
- new Vector3( - 1.5, 3, - 4 ),
- new Vector3( - 2, 4, - 4 )
- ];
- var v;
- a.translate( - x, y, - z );
- for ( var i = 0; i < a.vertices.length; i ++ ) {
- v = a.vertices[ i ];
- assert.ok(
- Math.abs( v.x - expected[ i ].x ) <= eps &&
- Math.abs( v.y - expected[ i ].y ) <= eps &&
- Math.abs( v.z - expected[ i ].z ) <= eps,
- "Vertex #" + i + " was translated as expected"
- );
- }
- } );
- QUnit.test( "scale", ( assert ) => {
- var a = getGeometry();
- var expected = [
- new Vector3( - 1, 0, 0 ),
- new Vector3( 1, 0, 0 ),
- new Vector3( 0, 3, 0 )
- ];
- var v;
- a.scale( 2, 3, 4 );
- for ( var i = 0; i < a.vertices.length; i ++ ) {
- v = a.vertices[ i ];
- assert.ok(
- Math.abs( v.x - expected[ i ].x ) <= eps &&
- Math.abs( v.y - expected[ i ].y ) <= eps &&
- Math.abs( v.z - expected[ i ].z ) <= eps,
- "Vertex #" + i + " was scaled as expected"
- );
- }
- } );
- QUnit.test( "lookAt", ( assert ) => {
- var a = getGeometry();
- var expected = [
- new Vector3( - 0.5, 0, 0 ),
- new Vector3( 0.5, 0, 0 ),
- new Vector3( 0, 0.5 * Math.sqrt( 2 ), 0.5 * Math.sqrt( 2 ) )
- ];
- a.lookAt( new Vector3( 0, - 1, 1 ) );
- for ( var i = 0; i < a.vertices.length; i ++ ) {
- var v = a.vertices[ i ];
- assert.ok(
- Math.abs( v.x - expected[ i ].x ) <= eps &&
- Math.abs( v.y - expected[ i ].y ) <= eps &&
- Math.abs( v.z - expected[ i ].z ) <= eps,
- "Vertex #" + i + " was adjusted as expected"
- );
- }
- } );
- QUnit.test( "fromBufferGeometry", ( assert ) => {
- var bufferGeometry = new BufferGeometry();
- bufferGeometry.setAttribute( 'position', new BufferAttribute( new Float32Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ] ), 3 ) );
- bufferGeometry.setAttribute( 'color', new BufferAttribute( new Float32Array( [ 0, 0, 0, 0.5, 0.5, 0.5, 1, 1, 1 ] ), 3 ) );
- bufferGeometry.setAttribute( 'normal', new BufferAttribute( new Float32Array( [ 0, 1, 0, 1, 0, 1, 1, 1, 0 ] ), 3 ) );
- bufferGeometry.setAttribute( 'uv', new BufferAttribute( new Float32Array( [ 0, 0, 0, 1, 1, 1 ] ), 2 ) );
- bufferGeometry.setAttribute( 'uv2', new BufferAttribute( new Float32Array( [ 0, 0, 0, 1, 1, 1 ] ), 2 ) );
- var geometry = new Geometry().fromBufferGeometry( bufferGeometry );
- var colors = geometry.colors;
- assert.ok(
- colors[ 0 ].r === 0 && colors[ 0 ].g === 0 && colors[ 0 ].b === 0 &&
- colors[ 1 ].r === 0.5 && colors[ 1 ].g === 0.5 && colors[ 1 ].b === 0.5 &&
- colors[ 2 ].r === 1 && colors[ 2 ].g === 1 && colors[ 2 ].b === 1
- , "colors were created well" );
- var vertices = geometry.vertices;
- assert.ok(
- vertices[ 0 ].x === 1 && vertices[ 0 ].y === 2 && vertices[ 0 ].z === 3 &&
- vertices[ 1 ].x === 4 && vertices[ 1 ].y === 5 && vertices[ 1 ].z === 6 &&
- vertices[ 2 ].x === 7 && vertices[ 2 ].y === 8 && vertices[ 2 ].z === 9
- , "vertices were created well" );
- var vNormals = geometry.faces[ 0 ].vertexNormals;
- assert.ok(
- vNormals[ 0 ].x === 0 && vNormals[ 0 ].y === 1 && vNormals[ 0 ].z === 0 &&
- vNormals[ 1 ].x === 1 && vNormals[ 1 ].y === 0 && vNormals[ 1 ].z === 1 &&
- vNormals[ 2 ].x === 1 && vNormals[ 2 ].y === 1 && vNormals[ 2 ].z === 0
- , "vertex normals were created well" );
- } );
- QUnit.todo( "center", ( assert ) => {
- assert.ok( false, "everything's gonna be alright" );
- } );
- QUnit.test( "normalize", ( assert ) => {
- var a = getGeometry();
- var sqrt = 0.5 * Math.sqrt( 2 );
- var expected = [
- new Vector3( - sqrt, - sqrt, 0 ),
- new Vector3( sqrt, - sqrt, 0 ),
- new Vector3( 0, sqrt, 0 )
- ];
- var v;
- a.normalize();
- for ( var i = 0; i < a.vertices.length; i ++ ) {
- v = a.vertices[ i ];
- assert.ok(
- Math.abs( v.x - expected[ i ].x ) <= eps &&
- Math.abs( v.y - expected[ i ].y ) <= eps &&
- Math.abs( v.z - expected[ i ].z ) <= eps,
- "Vertex #" + i + " was normalized as expected"
- );
- }
- } );
- QUnit.todo( "computeFaceNormals", ( assert ) => {
- assert.ok( false, "everything's gonna be alright" );
- } );
- QUnit.todo( "computeVertexNormals", ( assert ) => {
- assert.ok( false, "everything's gonna be alright" );
- } );
- QUnit.todo( "computeFlatVertexNormals", ( assert ) => {
- assert.ok( false, "everything's gonna be alright" );
- } );
- QUnit.todo( "computeMorphNormals", ( assert ) => {
- assert.ok( false, "everything's gonna be alright" );
- } );
- QUnit.test( "computeBoundingBox", ( assert ) => {
- var a = new Geometry().fromBufferGeometry( new DodecahedronBufferGeometry() );
- a.computeBoundingBox();
- assert.strictEqual( a.boundingBox.isEmpty(), false, "Bounding box isn't empty" );
- var allIn = true;
- for ( var i = 0; i < a.vertices.length; i ++ ) {
- if ( ! a.boundingBox.containsPoint( a.vertices[ i ] ) ) {
- allIn = false;
- }
- }
- assert.strictEqual( allIn, true, "All vertices are inside the box" );
- } );
- QUnit.test( "computeBoundingSphere", ( assert ) => {
- var a = new Geometry().fromBufferGeometry( new DodecahedronBufferGeometry() );
- a.computeBoundingSphere();
- var allIn = true;
- for ( var i = 0; i < a.vertices.length; i ++ ) {
- if ( ! a.boundingSphere.containsPoint( a.vertices[ i ] ) ) {
- allIn = false;
- }
- }
- assert.strictEqual( allIn, true, "All vertices are inside the bounding sphere" );
- } );
- QUnit.todo( "merge", ( assert ) => {
- assert.ok( false, "everything's gonna be alright" );
- } );
- QUnit.todo( "mergeMesh", ( assert ) => {
- assert.ok( false, "everything's gonna be alright" );
- } );
- QUnit.test( "mergeVertices", ( assert ) => {
- var a = new Geometry();
- var b = new BoxBufferGeometry( 1, 1, 1 );
- var verts, faces, removed;
- a.fromBufferGeometry( b );
- removed = a.mergeVertices();
- verts = a.vertices.length;
- faces = a.faces.length;
- assert.strictEqual( removed, 16, "Removed the expected number of vertices" );
- assert.strictEqual( verts, 8, "Minimum number of vertices remaining" );
- assert.strictEqual( faces, 12, "Minimum number of faces remaining" );
- } );
- QUnit.test( "sortFacesByMaterialIndex", ( assert ) => {
- var box = new BoxBufferGeometry( 1, 1, 1 );
- var a = new Geometry().fromBufferGeometry( box );
- var expected = [ 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5 ];
- a.faces.reverse(); // a bit too simple probably, still missing stuff like checking new UVs
- a.sortFacesByMaterialIndex();
- var indices = [];
- for ( var i = 0; i < a.faces.length; i ++ ) {
- indices.push( a.faces[ i ].materialIndex );
- }
- assert.deepEqual( indices, expected, "Faces in correct order" );
- } );
- QUnit.test( "toJSON", ( assert ) => {
- var a = getGeometry();
- var gold = {
- "metadata": {
- "version": 4.5,
- "type": "Geometry",
- "generator": "Geometry.toJSON"
- },
- "uuid": null,
- "type": "Geometry",
- "data": {
- "vertices": [ - 0.5, 0, 0, 0.5, 0, 0, 0, 1, 0 ],
- "normals": [ 0, 0, 1 ],
- "faces": [ 50, 0, 1, 2, 0, 0, 0, 0, 0 ]
- }
- };
- var json;
- a.faces.push( new Face3( 0, 1, 2 ) );
- a.computeFaceNormals();
- a.computeVertexNormals();
- json = a.toJSON();
- json.uuid = null;
- assert.deepEqual( json, gold, "Generated JSON is as expected" );
- } );
- QUnit.todo( "clone", ( assert ) => {
- assert.ok( false, "everything's gonna be alright" );
- } );
- QUnit.todo( "copy", ( assert ) => {
- assert.ok( false, "everything's gonna be alright" );
- } );
- QUnit.todo( "dispose", ( assert ) => {
- assert.ok( false, "everything's gonna be alright" );
- } );
- } );
- } );
|