elation-engine 0.9.113 → 0.9.115
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/css/systems/render.css +5 -1
- package/package.json +1 -1
- package/scripts/assets.js +103 -20
- package/scripts/assetworker.js +18 -1
- package/scripts/external/holoplay.js +1494 -0
- package/scripts/external/octree.js +0 -0
- package/scripts/external/three/CSS3DRenderer.js +46 -43
- package/scripts/external/three/CubemapToEquirectangular.js +1 -1
- package/scripts/external/three/three-extras.js +1553 -392
- package/scripts/external/three/three-icosa.js +2575 -0
- package/scripts/external/three/three-loaders.js +925 -133
- package/scripts/external/three/three-postprocessing.js +3 -3
- package/scripts/external/three/three-r116dev.js +50930 -0
- package/scripts/external/three/three-spotlighttextures.js +50953 -0
- package/scripts/external/three/three-vrm.js +2 -2
- package/scripts/external/three/three-working.js +35968 -0
- package/scripts/external/three/three.js +38532 -24087
- package/scripts/external/three-mesh-bvh.js +5370 -0
- package/scripts/external/three-old/BVHLoader.js +406 -0
- package/scripts/external/three-old/ColladaLoader.js +5519 -0
- package/scripts/external/three-old/ColladaLoader2.js +1694 -0
- package/scripts/external/three-old/CubemapToEquirectangular.js +188 -0
- package/scripts/external/three-old/DDSLoader.js +269 -0
- package/scripts/external/three-old/FBXLoader-mine.js +5063 -0
- package/scripts/external/three-old/FBXLoader.js +5112 -0
- package/scripts/external/three-old/FlyControls.js +295 -0
- package/scripts/external/three-old/GLTF2Loader.js +2950 -0
- package/scripts/external/three-old/GLTFLoader.js +2213 -0
- package/scripts/external/three-old/JSONLoader.js +435 -0
- package/scripts/external/three-old/MTLLoader.js +533 -0
- package/scripts/external/three-old/OBJLoader-experimental.js +874 -0
- package/scripts/external/three-old/OBJLoader-working.js +727 -0
- package/scripts/external/three-old/OBJLoader.js +723 -0
- package/scripts/external/three-old/OBJMTLLoader.js +440 -0
- package/scripts/external/three-old/OrbitControls.js +592 -0
- package/scripts/external/three-old/PLYLoader.js +517 -0
- package/scripts/external/three-old/TransformControls.js +1100 -0
- package/scripts/external/three-old/VRMLLoader.js +1021 -0
- package/scripts/external/three-old/glTFLoader-combined.js +2513 -0
- package/scripts/external/three-old/nodethree.js +44018 -0
- package/scripts/external/three-old/render/BleachBypassShader.js +64 -0
- package/scripts/external/three-old/render/BloomPass.js +116 -0
- package/scripts/external/three-old/render/CSS3DRenderer.js +310 -0
- package/scripts/external/three-old/render/ClearPass.js +44 -0
- package/scripts/external/three-old/render/ConvolutionShader.js +101 -0
- package/scripts/external/three-old/render/CopyShader.js +46 -0
- package/scripts/external/three-old/render/EffectComposer.js +211 -0
- package/scripts/external/three-old/render/FXAAShader.js +88 -0
- package/scripts/external/three-old/render/FilmPass.js +60 -0
- package/scripts/external/three-old/render/FilmShader.js +104 -0
- package/scripts/external/three-old/render/ManualMSAARenderPass.js +168 -0
- package/scripts/external/three-old/render/MaskPass.js +97 -0
- package/scripts/external/three-old/render/OculusRenderPass.js +84 -0
- package/scripts/external/three-old/render/OculusRiftEffect.js +240 -0
- package/scripts/external/three-old/render/PortalRenderPass.js +166 -0
- package/scripts/external/three-old/render/RecordingPass.js +208 -0
- package/scripts/external/three-old/render/RenderPass.js +57 -0
- package/scripts/external/three-old/render/SSAOShader.js +259 -0
- package/scripts/external/three-old/render/SepiaShader.js +54 -0
- package/scripts/external/three-old/render/ShaderPass.js +66 -0
- package/scripts/external/three-old/render/VREffect.js +482 -0
- package/scripts/external/three-old/shimthree.js +23 -0
- package/scripts/external/three-old/stats.js +6 -0
- package/scripts/external/three-old/three-88dev.js +45004 -0
- package/scripts/external/three-old/three-backgroundoptimization.js +44432 -0
- package/scripts/external/three-old/three-updates.js +44735 -0
- package/scripts/external/three-old/three-working.js +44719 -0
- package/scripts/external/three-old/three.js +44431 -0
- package/scripts/external/three-old/threex.rendererstats.js +66 -0
- package/scripts/external/three-old/tween.js +13 -0
- package/scripts/external/webvr-polyfill-new.js +3497 -0
- package/scripts/external/webvr-polyfill-newest.js +3491 -0
- package/scripts/external/webvr-polyfill-old.js +6337 -0
- package/scripts/geometries.js +2 -2
- package/scripts/math.js +6 -6
- package/scripts/systems/admin.js +1 -1
- package/scripts/systems/controls.js +6 -4
- package/scripts/systems/physics.js +10 -10
- package/scripts/systems/render.js +58 -20
- package/scripts/systems/render2.js +38 -0
- package/scripts/things/camera.js +6 -1
- package/scripts/things/generic-trackedvectors.js +1875 -0
- package/scripts/things/generic.js +3 -4
- package/scripts/things/label2d.js +1 -1
- package/scripts/things/leapmotion.js +6 -6
- package/scripts/things/menu.js +1 -1
- package/scripts/things/player-bak.js +638 -0
- package/scripts/things/player.js +28 -10
- package/scripts/things/skysphere.js +1 -1
- package/scripts/things/terrain.js +1 -1
- package/scripts/things/text.js +1 -1
|
@@ -0,0 +1,406 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @author herzig / http://github.com/herzig
|
|
3
|
+
* @author Mugen87 / https://github.com/Mugen87
|
|
4
|
+
*
|
|
5
|
+
* Description: reads BVH files and outputs a single THREE.Skeleton and an THREE.AnimationClip
|
|
6
|
+
*
|
|
7
|
+
* Currently only supports bvh files containing a single root.
|
|
8
|
+
*
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
THREE.BVHLoader = function( manager ) {
|
|
12
|
+
|
|
13
|
+
this.manager = ( manager !== undefined ) ? manager : THREE.DefaultLoadingManager;
|
|
14
|
+
|
|
15
|
+
this.animateBonePositions = true;
|
|
16
|
+
this.animateBoneRotations = true;
|
|
17
|
+
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
THREE.BVHLoader.prototype = {
|
|
21
|
+
|
|
22
|
+
constructor: THREE.BVHLoader,
|
|
23
|
+
|
|
24
|
+
load: function ( url, onLoad, onProgress, onError ) {
|
|
25
|
+
|
|
26
|
+
var scope = this;
|
|
27
|
+
|
|
28
|
+
var loader = new THREE.FileLoader( scope.manager );
|
|
29
|
+
loader.load( url, function( text ) {
|
|
30
|
+
|
|
31
|
+
onLoad( scope.parse( text ) );
|
|
32
|
+
|
|
33
|
+
}, onProgress, onError );
|
|
34
|
+
|
|
35
|
+
},
|
|
36
|
+
|
|
37
|
+
parse: function ( text ) {
|
|
38
|
+
|
|
39
|
+
/*
|
|
40
|
+
reads a string array (lines) from a BVH file
|
|
41
|
+
and outputs a skeleton structure including motion data
|
|
42
|
+
|
|
43
|
+
returns thee root node:
|
|
44
|
+
{ name: '', channels: [], children: [] }
|
|
45
|
+
*/
|
|
46
|
+
function readBvh( lines ) {
|
|
47
|
+
|
|
48
|
+
// read model structure
|
|
49
|
+
|
|
50
|
+
if ( nextLine( lines ) !== 'HIERARCHY' ) {
|
|
51
|
+
|
|
52
|
+
console.error( 'THREE.BVHLoader: HIERARCHY expected.' );
|
|
53
|
+
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
var list = []; // collects flat array of all bones
|
|
57
|
+
var root = readNode( lines, nextLine( lines ), list );
|
|
58
|
+
|
|
59
|
+
// read motion data
|
|
60
|
+
|
|
61
|
+
if ( nextLine( lines ) !== 'MOTION' ) {
|
|
62
|
+
|
|
63
|
+
console.error( 'THREE.BVHLoader: MOTION expected.' );
|
|
64
|
+
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// number of frames
|
|
68
|
+
|
|
69
|
+
var tokens = nextLine( lines ).split( /[\s]+/ );
|
|
70
|
+
var numFrames = parseInt( tokens[ 1 ] );
|
|
71
|
+
|
|
72
|
+
if ( isNaN( numFrames ) ) {
|
|
73
|
+
|
|
74
|
+
console.error( 'THREE.BVHLoader: Failed to read number of frames.' );
|
|
75
|
+
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// frame time
|
|
79
|
+
|
|
80
|
+
tokens = nextLine( lines ).split( /[\s]+/ );
|
|
81
|
+
var frameTime = parseFloat( tokens[ 2 ] );
|
|
82
|
+
|
|
83
|
+
if ( isNaN( frameTime ) ) {
|
|
84
|
+
|
|
85
|
+
console.error( 'THREE.BVHLoader: Failed to read frame time.' );
|
|
86
|
+
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
// read frame data line by line
|
|
90
|
+
|
|
91
|
+
for ( var i = 0; i < numFrames; i ++ ) {
|
|
92
|
+
|
|
93
|
+
tokens = nextLine( lines ).split( /[\s]+/ );
|
|
94
|
+
readFrameData( tokens, i * frameTime, root );
|
|
95
|
+
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
return list;
|
|
99
|
+
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/*
|
|
103
|
+
Recursively reads data from a single frame into the bone hierarchy.
|
|
104
|
+
The passed bone hierarchy has to be structured in the same order as the BVH file.
|
|
105
|
+
keyframe data is stored in bone.frames.
|
|
106
|
+
|
|
107
|
+
- data: splitted string array (frame values), values are shift()ed so
|
|
108
|
+
this should be empty after parsing the whole hierarchy.
|
|
109
|
+
- frameTime: playback time for this keyframe.
|
|
110
|
+
- bone: the bone to read frame data from.
|
|
111
|
+
*/
|
|
112
|
+
function readFrameData( data, frameTime, bone ) {
|
|
113
|
+
|
|
114
|
+
// end sites have no motion data
|
|
115
|
+
|
|
116
|
+
if ( bone.type === 'ENDSITE' ) return;
|
|
117
|
+
|
|
118
|
+
// add keyframe
|
|
119
|
+
|
|
120
|
+
var keyframe = {
|
|
121
|
+
time: frameTime,
|
|
122
|
+
position: new THREE.Vector3(),
|
|
123
|
+
rotation: new THREE.Quaternion()
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
bone.frames.push( keyframe );
|
|
127
|
+
|
|
128
|
+
var quat = new THREE.Quaternion();
|
|
129
|
+
|
|
130
|
+
var vx = new THREE.Vector3( 1, 0, 0 );
|
|
131
|
+
var vy = new THREE.Vector3( 0, 1, 0 );
|
|
132
|
+
var vz = new THREE.Vector3( 0, 0, 1 );
|
|
133
|
+
|
|
134
|
+
// parse values for each channel in node
|
|
135
|
+
|
|
136
|
+
for ( var i = 0; i < bone.channels.length; i ++ ) {
|
|
137
|
+
|
|
138
|
+
switch ( bone.channels[ i ] ) {
|
|
139
|
+
|
|
140
|
+
case 'Xposition':
|
|
141
|
+
keyframe.position.x = parseFloat( data.shift().trim() );
|
|
142
|
+
break;
|
|
143
|
+
case 'Yposition':
|
|
144
|
+
keyframe.position.y = parseFloat( data.shift().trim() );
|
|
145
|
+
break;
|
|
146
|
+
case 'Zposition':
|
|
147
|
+
keyframe.position.z = parseFloat( data.shift().trim() );
|
|
148
|
+
break;
|
|
149
|
+
case 'Xrotation':
|
|
150
|
+
quat.setFromAxisAngle( vx, parseFloat( data.shift().trim() ) * Math.PI / 180 );
|
|
151
|
+
keyframe.rotation.multiply( quat );
|
|
152
|
+
break;
|
|
153
|
+
case 'Yrotation':
|
|
154
|
+
quat.setFromAxisAngle( vy, parseFloat( data.shift().trim() ) * Math.PI / 180 );
|
|
155
|
+
keyframe.rotation.multiply( quat );
|
|
156
|
+
break;
|
|
157
|
+
case 'Zrotation':
|
|
158
|
+
quat.setFromAxisAngle( vz, parseFloat( data.shift().trim() ) * Math.PI / 180 );
|
|
159
|
+
keyframe.rotation.multiply( quat );
|
|
160
|
+
break;
|
|
161
|
+
default:
|
|
162
|
+
console.warn( 'THREE.BVHLoader: Invalid channel type.' );
|
|
163
|
+
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
// parse child nodes
|
|
169
|
+
|
|
170
|
+
for ( var i = 0; i < bone.children.length; i ++ ) {
|
|
171
|
+
|
|
172
|
+
readFrameData( data, frameTime, bone.children[ i ] );
|
|
173
|
+
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
/*
|
|
179
|
+
Recursively parses the HIERACHY section of the BVH file
|
|
180
|
+
|
|
181
|
+
- lines: all lines of the file. lines are consumed as we go along.
|
|
182
|
+
- firstline: line containing the node type and name e.g. 'JOINT hip'
|
|
183
|
+
- list: collects a flat list of nodes
|
|
184
|
+
|
|
185
|
+
returns: a BVH node including children
|
|
186
|
+
*/
|
|
187
|
+
function readNode( lines, firstline, list ) {
|
|
188
|
+
|
|
189
|
+
var node = { name: '', type: '', frames: [] };
|
|
190
|
+
list.push( node );
|
|
191
|
+
|
|
192
|
+
// parse node type and name
|
|
193
|
+
|
|
194
|
+
var tokens = firstline.split( /[\s]+/ );
|
|
195
|
+
|
|
196
|
+
if ( tokens[ 0 ].toUpperCase() === 'END' && tokens[ 1 ].toUpperCase() === 'SITE' ) {
|
|
197
|
+
|
|
198
|
+
node.type = 'ENDSITE';
|
|
199
|
+
node.name = 'ENDSITE'; // bvh end sites have no name
|
|
200
|
+
|
|
201
|
+
} else {
|
|
202
|
+
|
|
203
|
+
node.name = tokens[ 1 ];
|
|
204
|
+
node.type = tokens[ 0 ].toUpperCase();
|
|
205
|
+
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
if ( nextLine( lines ) !== '{' ) {
|
|
209
|
+
|
|
210
|
+
console.error( 'THREE.BVHLoader: Expected opening { after type & name' );
|
|
211
|
+
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
// parse OFFSET
|
|
215
|
+
|
|
216
|
+
tokens = nextLine( lines ).split( /[\s]+/ );
|
|
217
|
+
|
|
218
|
+
if ( tokens[ 0 ] !== 'OFFSET' ) {
|
|
219
|
+
|
|
220
|
+
console.error( 'THREE.BVHLoader: Expected OFFSET but got: ' + tokens[ 0 ] );
|
|
221
|
+
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
if ( tokens.length !== 4 ) {
|
|
225
|
+
|
|
226
|
+
console.error( 'THREE.BVHLoader: Invalid number of values for OFFSET.' );
|
|
227
|
+
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
var offset = new THREE.Vector3(
|
|
231
|
+
parseFloat( tokens[ 1 ] ),
|
|
232
|
+
parseFloat( tokens[ 2 ] ),
|
|
233
|
+
parseFloat( tokens[ 3 ] )
|
|
234
|
+
);
|
|
235
|
+
|
|
236
|
+
if ( isNaN( offset.x ) || isNaN( offset.y ) || isNaN( offset.z ) ) {
|
|
237
|
+
|
|
238
|
+
console.error( 'THREE.BVHLoader: Invalid values of OFFSET.' );
|
|
239
|
+
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
node.offset = offset;
|
|
243
|
+
|
|
244
|
+
// parse CHANNELS definitions
|
|
245
|
+
|
|
246
|
+
if ( node.type !== 'ENDSITE' ) {
|
|
247
|
+
|
|
248
|
+
tokens = nextLine( lines ).split( /[\s]+/ );
|
|
249
|
+
|
|
250
|
+
if ( tokens[ 0 ] !== 'CHANNELS' ) {
|
|
251
|
+
|
|
252
|
+
console.error( 'THREE.BVHLoader: Expected CHANNELS definition.' );
|
|
253
|
+
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
var numChannels = parseInt( tokens[ 1 ] );
|
|
257
|
+
node.channels = tokens.splice( 2, numChannels );
|
|
258
|
+
node.children = [];
|
|
259
|
+
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
// read children
|
|
263
|
+
|
|
264
|
+
while ( true ) {
|
|
265
|
+
|
|
266
|
+
var line = nextLine( lines );
|
|
267
|
+
|
|
268
|
+
if ( line === '}' ) {
|
|
269
|
+
|
|
270
|
+
return node;
|
|
271
|
+
|
|
272
|
+
} else {
|
|
273
|
+
|
|
274
|
+
node.children.push( readNode( lines, line, list ) );
|
|
275
|
+
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
/*
|
|
283
|
+
recursively converts the internal bvh node structure to a THREE.Bone hierarchy
|
|
284
|
+
|
|
285
|
+
source: the bvh root node
|
|
286
|
+
list: pass an empty array, collects a flat list of all converted THREE.Bones
|
|
287
|
+
|
|
288
|
+
returns the root THREE.Bone
|
|
289
|
+
*/
|
|
290
|
+
function toTHREEBone( source, list ) {
|
|
291
|
+
|
|
292
|
+
var bone = new THREE.Bone();
|
|
293
|
+
list.push( bone );
|
|
294
|
+
|
|
295
|
+
bone.position.add( source.offset );
|
|
296
|
+
bone.name = source.name;
|
|
297
|
+
|
|
298
|
+
if ( source.type !== 'ENDSITE' ) {
|
|
299
|
+
|
|
300
|
+
for ( var i = 0; i < source.children.length; i ++ ) {
|
|
301
|
+
|
|
302
|
+
bone.add( toTHREEBone( source.children[ i ], list ) );
|
|
303
|
+
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
return bone;
|
|
309
|
+
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
/*
|
|
313
|
+
builds a THREE.AnimationClip from the keyframe data saved in each bone.
|
|
314
|
+
|
|
315
|
+
bone: bvh root node
|
|
316
|
+
|
|
317
|
+
returns: a THREE.AnimationClip containing position and quaternion tracks
|
|
318
|
+
*/
|
|
319
|
+
function toTHREEAnimation( bones ) {
|
|
320
|
+
|
|
321
|
+
var tracks = [];
|
|
322
|
+
|
|
323
|
+
// create a position and quaternion animation track for each node
|
|
324
|
+
|
|
325
|
+
for ( var i = 0; i < bones.length; i ++ ) {
|
|
326
|
+
|
|
327
|
+
var bone = bones[ i ];
|
|
328
|
+
|
|
329
|
+
if ( bone.type === 'ENDSITE' )
|
|
330
|
+
continue;
|
|
331
|
+
|
|
332
|
+
// track data
|
|
333
|
+
|
|
334
|
+
var times = [];
|
|
335
|
+
var positions = [];
|
|
336
|
+
var rotations = [];
|
|
337
|
+
|
|
338
|
+
for ( var j = 0; j < bone.frames.length; j ++ ) {
|
|
339
|
+
|
|
340
|
+
var frame = bone.frames[ j ];
|
|
341
|
+
|
|
342
|
+
times.push( frame.time );
|
|
343
|
+
|
|
344
|
+
// the animation system animates the position property,
|
|
345
|
+
// so we have to add the joint offset to all values
|
|
346
|
+
|
|
347
|
+
positions.push( frame.position.x + bone.offset.x );
|
|
348
|
+
positions.push( frame.position.y + bone.offset.y );
|
|
349
|
+
positions.push( frame.position.z + bone.offset.z );
|
|
350
|
+
|
|
351
|
+
rotations.push( frame.rotation.x );
|
|
352
|
+
rotations.push( frame.rotation.y );
|
|
353
|
+
rotations.push( frame.rotation.z );
|
|
354
|
+
rotations.push( frame.rotation.w );
|
|
355
|
+
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
if ( scope.animateBonePositions ) {
|
|
359
|
+
|
|
360
|
+
tracks.push( new THREE.VectorKeyframeTrack( '.bones[' + bone.name + '].position', times, positions ) );
|
|
361
|
+
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
if ( scope.animateBoneRotations ) {
|
|
365
|
+
|
|
366
|
+
tracks.push( new THREE.QuaternionKeyframeTrack( '.bones[' + bone.name + '].quaternion', times, rotations ) );
|
|
367
|
+
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
return new THREE.AnimationClip( 'animation', - 1, tracks );
|
|
373
|
+
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
/*
|
|
377
|
+
returns the next non-empty line in lines
|
|
378
|
+
*/
|
|
379
|
+
function nextLine( lines ) {
|
|
380
|
+
|
|
381
|
+
var line;
|
|
382
|
+
// skip empty lines
|
|
383
|
+
while ( ( line = lines.shift().trim() ).length === 0 ) { }
|
|
384
|
+
return line;
|
|
385
|
+
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
var scope = this;
|
|
389
|
+
|
|
390
|
+
var lines = text.split( /[\r\n]+/g );
|
|
391
|
+
|
|
392
|
+
var bones = readBvh( lines );
|
|
393
|
+
|
|
394
|
+
var threeBones = [];
|
|
395
|
+
toTHREEBone( bones[ 0 ], threeBones );
|
|
396
|
+
|
|
397
|
+
var threeClip = toTHREEAnimation( bones );
|
|
398
|
+
|
|
399
|
+
return {
|
|
400
|
+
skeleton: new THREE.Skeleton( threeBones ),
|
|
401
|
+
clip: threeClip
|
|
402
|
+
};
|
|
403
|
+
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
};
|