123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
- AFRAME.registerComponent('three-model', require('./src/loaders/three-model'));
- },{"./src/loaders/three-model":2}],2:[function(require,module,exports){
- var DEFAULT_ANIMATION = '__auto__';
- /**
- * three-model
- *
- * Loader for THREE.js JSON format. Somewhat confusingly, there are two
- * different THREE.js formats, both having the .json extension. This loader
- * supports both, but requires you to specify the mode as "object" or "json".
- *
- * Typically, you will use "json" for a single mesh, and "object" for a scene
- * or multiple meshes. Check the console for errors, if in doubt.
- *
- * See: https://clara.io/learn/user-guide/data_exchange/threejs_export
- */
- module.exports = {
- deprecated: true,
- schema: {
- src: { type: 'asset' },
- loader: { default: 'object', oneOf: ['object', 'json'] },
- enableAnimation: { default: true },
- animation: { default: DEFAULT_ANIMATION },
- animationDuration: { default: 0 },
- crossorigin: { default: '' }
- },
- init: function () {
- this.model = null;
- this.mixer = null;
- console.warn('[three-model] Component is deprecated. Use json-model or object-model instead.');
- },
- update: function (previousData) {
- previousData = previousData || {};
- var loader,
- data = this.data;
- if (!data.src) {
- this.remove();
- return;
- }
- // First load.
- if (!Object.keys(previousData).length) {
- this.remove();
- if (data.loader === 'object') {
- loader = new THREE.ObjectLoader();
- if (data.crossorigin) loader.setCrossOrigin(data.crossorigin);
- loader.load(data.src, function(loaded) {
- loaded.traverse( function(object) {
- if (object instanceof THREE.SkinnedMesh)
- loaded = object;
- });
- if(loaded.material)
- loaded.material.skinning = !!((loaded.geometry && loaded.geometry.bones) || []).length;
- this.load(loaded);
- }.bind(this));
- } else if (data.loader === 'json') {
- loader = new THREE.JSONLoader();
- if (data.crossorigin) loader.crossOrigin = data.crossorigin;
- loader.load(data.src, function (geometry, materials) {
- // Attempt to automatically detect common material options.
- materials.forEach(function (mat) {
- mat.vertexColors = (geometry.faces[0] || {}).color ? THREE.FaceColors : THREE.NoColors;
- mat.skinning = !!(geometry.bones || []).length;
- mat.morphTargets = !!(geometry.morphTargets || []).length;
- mat.morphNormals = !!(geometry.morphNormals || []).length;
- });
- var mesh = (geometry.bones || []).length
- ? new THREE.SkinnedMesh(geometry, new THREE.MultiMaterial(materials))
- : new THREE.Mesh(geometry, new THREE.MultiMaterial(materials));
- this.load(mesh);
- }.bind(this));
- } else {
- throw new Error('[three-model] Invalid mode "%s".', data.mode);
- }
- return;
- }
- var activeAction = this.model && this.model.activeAction;
- if (data.animation !== previousData.animation) {
- if (activeAction) activeAction.stop();
- this.playAnimation();
- return;
- }
- if (activeAction && data.enableAnimation !== activeAction.isRunning()) {
- data.enableAnimation ? this.playAnimation() : activeAction.stop();
- }
- if (activeAction && data.animationDuration) {
- activeAction.setDuration(data.animationDuration);
- }
- },
- load: function (model) {
- this.model = model;
- this.mixer = new THREE.AnimationMixer(this.model);
- this.el.setObject3D('mesh', model);
- this.el.emit('model-loaded', {format: 'three', model: model});
- if (this.data.enableAnimation) this.playAnimation();
- },
- playAnimation: function () {
- var clip,
- data = this.data,
- animations = this.model.animations || this.model.geometry.animations || [];
- if (!data.enableAnimation || !data.animation || !animations.length) {
- return;
- }
- clip = data.animation === DEFAULT_ANIMATION
- ? animations[0]
- : THREE.AnimationClip.findByName(animations, data.animation);
- if (!clip) {
- console.error('[three-model] Animation "%s" not found.', data.animation);
- return;
- }
- this.model.activeAction = this.mixer.clipAction(clip, this.model);
- if (data.animationDuration) {
- this.model.activeAction.setDuration(data.animationDuration);
- }
- this.model.activeAction.play();
- },
- remove: function () {
- if (this.mixer) this.mixer.stopAllAction();
- if (this.model) this.el.removeObject3D('mesh');
- },
- tick: function (t, dt) {
- if (this.mixer && !isNaN(dt)) {
- this.mixer.update(dt / 1000);
- }
- }
- };
- },{}]},{},[1]);
|