Files
apt-nl-map/static/Magic4/js/three.js-dev/test/unit/example/loaders/GLTFLoader.tests.js
2024-12-04 10:21:04 +08:00

119 lines
3.1 KiB
JavaScript

/* global QUnit */
import { GLTFExporter } from '../../../../examples/jsm/exporters/GLTFExporter';
import { GLTFLoader } from '../../../../examples/jsm/loaders/GLTFLoader';
import { AnimationClip } from '../../../../src/animation/AnimationClip';
import { BufferAttribute } from '../../../../src/core/BufferAttribute';
import { BufferGeometry } from '../../../../src/core/BufferGeometry';
import { Mesh } from '../../../../src/objects/Mesh';
import { MeshStandardMaterial } from '../../../../src/materials/MeshStandardMaterial';
import { Object3D } from '../../../../src/core/Object3D';
import { Scene } from '../../../../src/scenes/Scene';
import { VectorKeyframeTrack } from '../../../../src/animation/tracks/VectorKeyframeTrack';
export default QUnit.module( 'Loaders', () => {
QUnit.module( 'GLTFLoader', () => {
QUnit.test( 'constructor', ( assert ) => {
assert.ok( new GLTFLoader(), 'Can instantiate a loader.' );
} );
} );
QUnit.module( 'GLTFLoader-webonly', () => {
QUnit.test( 'parse - basic', ( assert ) => {
var done = assert.async();
var geometry = new BufferGeometry();
var array = new Float32Array( [
- 1, - 1, - 1,
1, 1, 1,
4, 4, 4
] );
geometry.setAttribute( 'position', new BufferAttribute( array, 3 ) );
var meshIn = new Mesh( geometry, new MeshStandardMaterial( { color: 0xFF0000 } ) );
meshIn.name = 'test_mesh';
var exporter = new GLTFExporter();
var loader = new GLTFLoader();
exporter.parse( meshIn, function ( binary ) {
loader.parse( binary, './', function ( gltf ) {
var meshOut = gltf.scene.children[ 0 ];
var attrsIn = meshIn.geometry.attributes;
var attrsOut = meshOut.geometry.attributes;
assert.equal( meshIn.name, meshOut.name, 'loads names' );
assert.equal( meshIn.material.color.getHex(), meshOut.material.color.getHex(), 'loads color' );
assert.smartEqual( attrsIn.position.array, attrsOut.position.array, 'loads positions' );
assert.equal( undefined, attrsOut.normal, 'ignores missing attributes' );
done();
}, undefined, function ( e ) {
console.error( e );
} );
}, { binary: true } );
} );
QUnit.test( 'parse - animation', ( assert ) => {
var done = assert.async();
var node1 = new Object3D();
node1.name = 'node1';
var node2 = new Object3D();
node2.name = 'node2';
var scene = new Scene();
scene.add( node1, node2 );
var clip = new AnimationClip( 'clip', undefined, [
new VectorKeyframeTrack( 'node1.position', [ 0, 1, 2 ], [ 0, 0, 0, 30, 0, 0, 0, 0, 0 ] )
] );
var exporter = new GLTFExporter();
var loader = new GLTFLoader();
exporter.parse( scene, function ( binary ) {
loader.parse( binary, './', function ( gltf ) {
var clipOut = gltf.animations[ 0 ];
assert.equal( 'node1.position', clipOut.tracks[ 0 ].name, 'track name' );
assert.smartEqual( clip.tracks[ 0 ].times, clipOut.tracks[ 0 ].times, 'track times' );
assert.smartEqual( clip.tracks[ 0 ].values, clipOut.tracks[ 0 ].values, 'track values' );
done();
}, undefined, function ( e ) {
console.error( e );
} );
}, { binary: true, animations: [ clip ] } );
} );
} );
} );