webvr js meetup initial commit
This commit is contained in:
141
node_modules/three/examples/js/UCSCharacter.js
generated
vendored
Normal file
141
node_modules/three/examples/js/UCSCharacter.js
generated
vendored
Normal file
@@ -0,0 +1,141 @@
|
||||
THREE.UCSCharacter = function() {
|
||||
|
||||
var scope = this;
|
||||
|
||||
var mesh;
|
||||
|
||||
this.scale = 1;
|
||||
|
||||
this.root = new THREE.Object3D();
|
||||
|
||||
this.numSkins = undefined;
|
||||
this.numMorphs = undefined;
|
||||
|
||||
this.skins = [];
|
||||
this.materials = [];
|
||||
this.morphs = [];
|
||||
|
||||
this.mixer = new THREE.AnimationMixer( this.root );
|
||||
|
||||
this.onLoadComplete = function () {};
|
||||
|
||||
this.loadCounter = 0;
|
||||
|
||||
this.loadParts = function ( config ) {
|
||||
|
||||
this.numSkins = config.skins.length;
|
||||
this.numMorphs = config.morphs.length;
|
||||
|
||||
// Character geometry + number of skins
|
||||
this.loadCounter = 1 + config.skins.length;
|
||||
|
||||
// SKINS
|
||||
this.skins = loadTextures( config.baseUrl + "skins/", config.skins );
|
||||
this.materials = createMaterials( this.skins );
|
||||
|
||||
// MORPHS
|
||||
this.morphs = config.morphs;
|
||||
|
||||
// CHARACTER
|
||||
var loader = new THREE.JSONLoader();
|
||||
console.log( config.baseUrl + config.character );
|
||||
loader.load( config.baseUrl + config.character, function( geometry ) {
|
||||
|
||||
geometry.computeBoundingBox();
|
||||
geometry.computeVertexNormals();
|
||||
|
||||
mesh = new THREE.SkinnedMesh( geometry, new THREE.MultiMaterial() );
|
||||
mesh.name = config.character;
|
||||
scope.root.add( mesh );
|
||||
|
||||
var bb = geometry.boundingBox;
|
||||
scope.root.scale.set( config.s, config.s, config.s );
|
||||
scope.root.position.set( config.x, config.y - bb.min.y * config.s, config.z );
|
||||
|
||||
mesh.castShadow = true;
|
||||
mesh.receiveShadow = true;
|
||||
|
||||
scope.mixer.clipAction( geometry.animations[0], mesh ).play();
|
||||
|
||||
scope.setSkin( 0 );
|
||||
|
||||
scope.checkLoadComplete();
|
||||
|
||||
} );
|
||||
|
||||
};
|
||||
|
||||
this.setSkin = function( index ) {
|
||||
|
||||
if ( mesh && scope.materials ) {
|
||||
|
||||
mesh.material = scope.materials[ index ];
|
||||
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
this.updateMorphs = function( influences ) {
|
||||
|
||||
if ( mesh ) {
|
||||
|
||||
for ( var i = 0; i < scope.numMorphs; i ++ ) {
|
||||
|
||||
mesh.morphTargetInfluences[ i ] = influences[ scope.morphs[ i ] ] / 100;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
function loadTextures( baseUrl, textureUrls ) {
|
||||
|
||||
var textureLoader = new THREE.TextureLoader();
|
||||
var textures = [];
|
||||
|
||||
for ( var i = 0; i < textureUrls.length; i ++ ) {
|
||||
|
||||
textures[ i ] = textureLoader.load( baseUrl + textureUrls[ i ], scope.checkLoadComplete );
|
||||
textures[ i ].mapping = THREE.UVMapping;
|
||||
textures[ i ].name = textureUrls[ i ];
|
||||
|
||||
}
|
||||
|
||||
return textures;
|
||||
|
||||
}
|
||||
|
||||
function createMaterials( skins ) {
|
||||
|
||||
var materials = [];
|
||||
|
||||
for ( var i = 0; i < skins.length; i ++ ) {
|
||||
|
||||
materials[ i ] = new THREE.MeshLambertMaterial( {
|
||||
color: 0xeeeeee,
|
||||
specular: 10.0,
|
||||
map: skins[ i ],
|
||||
skinning: true,
|
||||
morphTargets: true
|
||||
} );
|
||||
|
||||
}
|
||||
|
||||
return materials;
|
||||
|
||||
}
|
||||
|
||||
this.checkLoadComplete = function () {
|
||||
|
||||
scope.loadCounter -= 1;
|
||||
|
||||
if ( scope.loadCounter === 0 ) {
|
||||
|
||||
scope.onLoadComplete();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
};
|
||||
Reference in New Issue
Block a user