Normand Briere
2019-06-27 1807e7752960ac229cddd34b100e92cadbac9459
Mocap.java
....@@ -26,6 +26,575 @@
2626 public class Mocap extends Object3D
2727 {
2828 static final long serialVersionUID = 7437391692559853707L;
29
+
30
+ void Fade()
31
+ {
32
+ if (currentbones == null || CameraPane.fullreset)
33
+ return;
34
+
35
+ cVector temp = new cVector();
36
+
37
+ int numframes = bvh.animation.getNumFrames();
38
+
39
+ int b;
40
+ float[] data;
41
+ Quat4d quatstart = new Quat4d();
42
+ Quat4d quatend = new Quat4d();
43
+ Quat4d quat = new Quat4d();
44
+ Matrix4d mat4d = new Matrix4d();
45
+ double[][] rot = new double[4][4];
46
+ for (b=numbones; --b>=0;) // HIP ROTATION: 0;)
47
+ {
48
+ // int hipindex = get(0)._index;
49
+
50
+// assert(get(0).get(0)._isHip);
51
+
52
+ // if (b == hipindex)
53
+ // continue;
54
+
55
+ data = bvh.animation.getBoneData(b);
56
+
57
+ int dof = 3; // data.length/numframes;
58
+
59
+ if (b == 0)
60
+ {
61
+ dof = 6;
62
+ }
63
+ // assert(dof == 3);
64
+
65
+ int boneframe3 = (b-1)*3; // dof;
66
+
67
+ // System.err.println("Bone #" + b + ": dof = " + dof);
68
+ int fadein = 45; // 120;
69
+
70
+ // if (b == hipindex)
71
+ // fadein *= 5;
72
+
73
+ if (fadein > numframes)
74
+ fadein = 0; // numframes;
75
+
76
+ for (int fi=fadein; --fi>=0;)
77
+ //for (int f=numframes; --f>=0;)
78
+ {
79
+ int f = fi + GetFirstFrame();
80
+
81
+ int f3 = f*dof;
82
+
83
+ float k = fi;
84
+
85
+ k /= fadein - 1;
86
+
87
+ if (Float.isNaN(k))
88
+ k = 1; // 0/0
89
+
90
+ k = (float) (-Math.cos(k*Math.PI));
91
+ k += 1;
92
+ k /= 2;
93
+
94
+ int start = 3;
95
+ int end = 0;
96
+
97
+ if (dof == 6)
98
+ {
99
+ start = 6;
100
+ end = 3;
101
+ }
102
+
103
+ if (b == 0)
104
+ {
105
+ for (int i=start; --i>=end;)
106
+ {
107
+ //data[f3 + i] += pos[i] - data[frame3 + i];
108
+// data[f3 + i] = k*data[f3+i] + (1-k)*
109
+// currentbones[boneframe3 + i-end];
110
+// data[f3 + i] = (float)CurveAngle(data[f3+i], currenthip[i], 1-k);
111
+ }
112
+
113
+ // TODO: translation
114
+
115
+// _t1.setIdentity();
116
+// _t2.setIdentity();
117
+// _t2.rotZ(currentbones[boneframe3 + start-1-end]);
118
+// _t1.mul(_t2);
119
+// _t2.setIdentity();
120
+// if (b == 0)
121
+// {
122
+// _t2.rotY(currentbones[boneframe3 + start-2-end]);
123
+// _t1.mul(_t2);
124
+// _t2.setIdentity();
125
+// _t2.rotX(currentbones[boneframe3 + start-3-end]);
126
+// }
127
+// else
128
+// {
129
+// _t2.rotX(currentbones[boneframe3 + start-2-end]);
130
+// _t1.mul(_t2);
131
+// _t2.setIdentity();
132
+// _t2.rotY(currentbones[boneframe3 + start-3-end]);
133
+// }
134
+// _t1.mul(_t2);
135
+// _t2.setIdentity();
136
+//
137
+// _t1.get(mat4d);
138
+//
139
+// mat4d.get(quatstart);
140
+//
141
+// _t1.setIdentity();
142
+// _t2.setIdentity();
143
+// _t2.rotZ(data[f3 + start-1]);
144
+// _t1.mul(_t2);
145
+// _t2.setIdentity();
146
+// if (b == 0)
147
+// {
148
+// _t2.rotY(data[f3 + start-2]);
149
+// _t1.mul(_t2);
150
+// _t2.setIdentity();
151
+// _t2.rotX(data[f3 + start-3]);
152
+// }
153
+// else
154
+// {
155
+// _t2.rotX(data[f3 + start-2]);
156
+// _t1.mul(_t2);
157
+// _t2.setIdentity();
158
+// _t2.rotY(data[f3 + start-3]);
159
+// }
160
+//
161
+// _t1.mul(_t2);
162
+// _t2.setIdentity();
163
+//
164
+// _t1.get(mat4d);
165
+//
166
+// mat4d.get(quatend);
167
+//
168
+// double dot = quatstart.x*quatend.x +
169
+// quatstart.y*quatend.y +
170
+// quatstart.z*quatend.z +
171
+// quatstart.w*quatend.w
172
+// ;
173
+//
174
+// if (dot < 0)
175
+// {
176
+// quatend.x *= -1;
177
+// quatend.y *= -1;
178
+// quatend.z *= -1;
179
+// quatend.w *= -1;
180
+// }
181
+//
182
+// // k = 1-k;
183
+//
184
+// quat.x = (1-k)*quatstart.x + k*quatend.x;
185
+// quat.y = (1-k)*quatstart.y + k*quatend.y;
186
+// quat.z = (1-k)*quatstart.z + k*quatend.z;
187
+// quat.w = (1-k)*quatstart.w + k*quatend.w;
188
+//
189
+// quat.normalize();
190
+//
191
+// mat4d.set(quat);
192
+//
193
+// cJ3D.SetTransform(rot, mat4d);
194
+//
195
+// matrixToEulerXYZ(rot, temp);
196
+//
197
+// data[f3 + start-1] = -(float)temp.z;
198
+//
199
+// if (b == 0)
200
+// {
201
+// data[f3 + start-2] = -(float)temp.y;
202
+// data[f3 + start-3] = -(float)temp.x;
203
+// }
204
+// else
205
+// {
206
+// data[f3 + start-2] = -(float)temp.x;
207
+// data[f3 + start-3] = -(float)temp.y;
208
+// }
209
+ }
210
+ else
211
+ {
212
+ for (int i=start; --i>=end;)
213
+ {
214
+ //data[f3 + i] += pos[i] - data[frame3 + i];
215
+// data[f3 + i] = k*data[f3+i] + (1-k)*
216
+// currentbones[boneframe3 + i-end];
217
+ data[f3 + i] = (float)CurveAngle(data[f3+i], currentbones[boneframe3 + i/*-end*/], 1-k);
218
+ }
219
+ }
220
+ }
221
+ }
222
+ }
223
+
224
+ // Updates the toParent matrix to keep the same position and orientation
225
+ // before resetting the mocap data.
226
+ void SetGlobalTransform()
227
+ {
228
+ //SetCurrentBones(frame);
229
+
230
+ cVector temp = new cVector();
231
+ cVector pos = new cVector();
232
+ cVector poship = new cVector();
233
+
234
+ double angleY = 0;
235
+ double angleYhip = 0;
236
+
237
+ Object3D hip = get(0);
238
+
239
+ if (hip.get(0).toParent == null)
240
+ {
241
+ hip.get(0).toParent = LA.newMatrix();
242
+ hip.get(0).fromParent = LA.newMatrix();
243
+ }
244
+
245
+ LA.matConcat(toParent, hip.get(0).toParent, matrix);
246
+ poship.x = matrix[3][0];
247
+ poship.y = matrix[3][1];
248
+ poship.z = matrix[3][2];
249
+
250
+ temp.x = 1;
251
+ temp.y = 0;
252
+ temp.z = 0;
253
+
254
+ LA.xformDir(temp, matrix, temp);
255
+
256
+ angleYhip = Math.atan2(-temp.z, temp.x);
257
+
258
+ LA.matIdentity(toParent);
259
+ LA.matYRotate(toParent, angleYhip);
260
+ LA.matTranslate(toParent, poship.x, poship.y, poship.z);
261
+
262
+// LA.matConcat(toParent, hip.get(0).toParent, toParent);
263
+
264
+ CameraPane.debugpointG.toParent[3][0] = poship.x;
265
+ CameraPane.debugpointG.toParent[3][1] = poship.y;
266
+ CameraPane.debugpointG.toParent[3][2] = poship.z;
267
+
268
+ LA.matInvert(toParent, fromParent);
269
+
270
+ LA.matIdentity(hip.get(0).toParent);
271
+ LA.matIdentity(hip.get(0).fromParent);
272
+
273
+// if (true)
274
+// return;
275
+
276
+ // Updates hip.get(0).toParent
277
+ setPose(hip, GetFirstFrame(), bvh.animation.getBoneData(hip._index));
278
+
279
+ // A = toParent; B = hip.get(0).toParent
280
+ // A'*B = A
281
+ // A' = A * B-1
282
+
283
+ poship.x = hip.get(0).toParent[3][0];
284
+ poship.y = hip.get(0).toParent[3][1];
285
+ poship.z = hip.get(0).toParent[3][2];
286
+
287
+ temp.x = 1;
288
+ temp.y = 0;
289
+ temp.z = 0;
290
+
291
+ LA.xformDir(temp, hip.get(0).toParent, temp);
292
+
293
+ angleYhip = Math.atan2(-temp.z, temp.x);
294
+
295
+ LA.matIdentity(matrix);
296
+ LA.matYRotate(matrix, angleYhip);
297
+ LA.matTranslate(matrix, poship.x, poship.y, poship.z);
298
+
299
+ //LA.matInvert(hip.get(0).toParent, matrix);
300
+ LA.matInvert(matrix, matrix);
301
+
302
+ //LA.matIdentity(matrix);
303
+ //LA.matTranslate(matrix, -poship.x, -poship.y, -poship.z);
304
+
305
+ LA.matConcat(toParent, matrix, toParent);
306
+
307
+
308
+ LA.matConcat(toParent, hip.get(0).toParent, matrix);
309
+ pos.x = hip.get(0).toParent[3][0];
310
+ pos.y = hip.get(0).toParent[3][1];
311
+ pos.z = hip.get(0).toParent[3][2];
312
+ LA.xformPos(new cVector(), hip.get(0).toParent, pos);
313
+ LA.xformPos(pos, toParent, pos);
314
+
315
+// temp.x = 1;
316
+// temp.y = 0;
317
+// temp.z = 0;
318
+//
319
+// LA.xformDir(temp, toParent, temp);
320
+//
321
+// angleY = Math.atan2(-temp.z, temp.x);
322
+//
323
+// LA.matIdentity(toParent);
324
+// LA.matYRotate(toParent, angleY - angleYhip);
325
+// LA.matTranslate(toParent, pos.x - poship.x, pos.y - poship.y, pos.z - poship.z);
326
+
327
+ CameraPane.debugpointP.toParent[3][0] = pos.x;
328
+ CameraPane.debugpointP.toParent[3][1] = pos.y;
329
+ CameraPane.debugpointP.toParent[3][2] = pos.z;
330
+
331
+ CameraPane.debugpointC.toParent[3][0] = poship.x;
332
+ CameraPane.debugpointC.toParent[3][1] = poship.y;
333
+ CameraPane.debugpointC.toParent[3][2] = poship.z;
334
+
335
+ poship.x = toParent[3][0];
336
+ poship.y = toParent[3][1];
337
+ poship.z = toParent[3][2];
338
+
339
+ CameraPane.debugpointR.toParent[3][0] = poship.x;
340
+ CameraPane.debugpointR.toParent[3][1] = poship.y;
341
+ CameraPane.debugpointR.toParent[3][2] = poship.z;
342
+
343
+ LA.matInvert(toParent, fromParent);
344
+ }
345
+
346
+ void LoadData()
347
+ {
348
+ float[] thedata = bvh.animation.getBoneData(0);
349
+
350
+// thedata[0] = 0;
351
+// thedata[1] = 0;
352
+// thedata[2] = 0;
353
+// thedata[3] = 0;
354
+// thedata[4] = 0;
355
+// thedata[5] = 0;
356
+
357
+ if (true)
358
+ return;
359
+
360
+ for (int b=numbones; --b>=0;)
361
+ //int b = 0;
362
+ {
363
+ thedata = bvh.animation.getBoneData(b);
364
+
365
+ int numframes = bvh.animation.getNumFrames();
366
+
367
+ int dof = 6; // thedata.length/numframes;
368
+
369
+ if (b > 0)
370
+ dof = 3;
371
+
372
+ if (dof != thedata.length/numframes)
373
+ {
374
+ System.err.println("Bone #" + b + ": dof = " + dof + " ---> " + (thedata.length/numframes));
375
+ dof = thedata.length/numframes;
376
+ }
377
+
378
+ //for (int f=numframes; --f>=offset;)
379
+ int firstframe = GetFirstFrame();
380
+ for (int f=0; f<numframes-firstframe; f++)
381
+ {
382
+ int f3 = f*dof;
383
+
384
+ //for (int i=3/*dof*/; --i>=0;)
385
+ for (int i=dof; --i>=0;)
386
+ {
387
+ //thedata[f3 + i] += thedata[i] - thedata[offset*dof + i];
388
+ thedata[f3 + i] = thedata[f3 + firstframe*dof + i];
389
+ }
390
+ }
391
+ }
392
+ }
393
+
394
+ void ResetZero()
395
+ {
396
+ for (int b=numbones; --b>=0;)
397
+ {
398
+ float[] thedata = bvh.animation.getBoneData(b);
399
+
400
+ int numframes = bvh.animation.getNumFrames();
401
+
402
+ int dof = 6;
403
+
404
+ if (b > 0)
405
+ dof = 3;
406
+
407
+ for (int i=dof; --i>=0;)
408
+ {
409
+ thedata[i] = 0;
410
+ }
411
+ }
412
+ }
413
+
414
+ void SetCurrentBones(int frame)
415
+ {
416
+ if (frame == 0)
417
+ {
418
+ //frame = 1;
419
+ }
420
+
421
+ if (currentbones == null)
422
+ {
423
+ currentbones = new double[(numbones-1)*3];
424
+ currenthip = new double[6];
425
+ }
426
+
427
+ for (int b=numbones; --b>=1;) // HIP ROTATION: 0;)
428
+ //int b = 0;
429
+ {
430
+ float[] data = bvh.animation.getBoneData(b);
431
+
432
+ // int numframes = bvh.animation.getNumFrames();
433
+
434
+ int dof = 6; // data.length/numframes;
435
+
436
+ if (b > 0)
437
+ dof = 3;
438
+
439
+ //assert(dof == 3);
440
+
441
+ // System.err.println("Bone #" + b + ": dof = " + dof);
442
+ int theframe = // 1; // baseframe;
443
+ frame;
444
+
445
+ int frame3 = theframe*dof;
446
+ int bone3 = (b-1)*dof;
447
+
448
+ int start = 3;
449
+ int end = 0;
450
+
451
+ if (dof == 6)
452
+ {
453
+ start = 6;
454
+ //end = 3;
455
+ }
456
+
457
+ for (int i=start; --i>=end;)
458
+ {
459
+ currentbones[bone3 + i/*-end*/] = data[frame3 + i];
460
+ }
461
+ }
462
+
463
+ float[] data = bvh.animation.getBoneData(0);
464
+
465
+ int dof = 6;
466
+
467
+ int theframe = frame;
468
+
469
+ int frame3 = theframe*dof;
470
+
471
+ int start = 6;
472
+ int end = 0;
473
+
474
+ for (int i=start; --i>=end;)
475
+ {
476
+ currenthip[i] = data[frame3 + i];
477
+ }
478
+ }
479
+
480
+ static cVector centroid = new cVector();
481
+ static cVector mocaporigin = new cVector();
482
+
483
+ void SetHipOrientation()
484
+ {
485
+ Object3D hip = get(0);
486
+
487
+ if (toParent == null)
488
+ {
489
+ toParent = LA.newMatrix();
490
+ fromParent = LA.newMatrix();
491
+ }
492
+
493
+ LA.matConcat(toParent, hip.get(0).toParent, matrix);
494
+
495
+ mocaporigin.x = matrix[3][0];
496
+ mocaporigin.y = matrix[3][1];
497
+ mocaporigin.z = matrix[3][2];
498
+
499
+ centroid.x = matrix[3][0];
500
+ centroid.y = matrix[3][1];
501
+ centroid.z = matrix[3][2];
502
+// this.getCentroid(centroid, true);
503
+
504
+ CameraPane.CreateSelectedPoint();
505
+ CameraPane.debugpointG.name = "";
506
+ CameraPane.debugpointG.toParent[3][0] = mocaporigin.x;
507
+ CameraPane.debugpointG.toParent[3][1] = mocaporigin.y;
508
+ CameraPane.debugpointG.toParent[3][2] = mocaporigin.z;
509
+
510
+ CameraPane.debugpointP.name = "";
511
+ CameraPane.debugpointP.toParent[3][0] = centroid.x;
512
+ CameraPane.debugpointP.toParent[3][1] = centroid.y;
513
+ CameraPane.debugpointP.toParent[3][2] = centroid.z;
514
+
515
+ cVector goal = GetGoal(centroid);
516
+ if (goal != null)
517
+ {
518
+ System.err.println("GOAL change (" + this + "): " + goal + " (was " + goalposx + ", " + goalposz + ")");
519
+
520
+ goalposx = goal.x;
521
+ goalposz = goal.z;
522
+ targetdirx = targetdirz = 0;
523
+ }
524
+
525
+ if (goalposx == 0 && goalposz == 0)
526
+ {
527
+ // No target
528
+ if (ScriptNode.speaker != null)
529
+ {
530
+ Object3D sourcenode = GetFileRoot();
531
+ Object3D speakernode = ScriptNode.speaker.GetFileRoot();
532
+
533
+ //System.err.println("speaker is " + speakernode + "; last was " + ScriptNode.lastspeaker);
534
+
535
+ Object3D speaker = ScriptNode.speaker;
536
+
537
+ if (speakernode == sourcenode)
538
+ {
539
+ if (ScriptNode.lastspeaker != null)
540
+ {
541
+ speakernode = ScriptNode.lastspeaker.GetFileRoot();
542
+ speaker = ScriptNode.lastspeaker;
543
+ }
544
+ else
545
+ return;
546
+ }
547
+
548
+ cVector dst = new cVector();
549
+
550
+ boolean success = speakernode.getCentroid(dst); // , true);
551
+
552
+ if (!success)
553
+ new Exception().printStackTrace();
554
+
555
+ //speakernode.parent.TransformToWorld(dst);
556
+ //sourcenode.parent.TransformToLocal(dst);
557
+ this.parent.TransformToLocal(dst);
558
+
559
+ goalposx = dst.x;
560
+ goalposz = dst.z;
561
+ }
562
+ else
563
+ return;
564
+ }
565
+
566
+ cVector temp = new cVector();
567
+
568
+ temp.x = 1;
569
+ temp.y = 0;
570
+ temp.z = 0;
571
+
572
+ LA.xformDir(temp, matrix, temp);
573
+
574
+ double angleYhip = Math.atan2(-temp.z, temp.x);
575
+
576
+ double angleYtarget = Math.atan2(goalposx - centroid.x, goalposz - centroid.z);
577
+
578
+ LA.matIdentity(matrix);
579
+ LA.matTranslate(matrix, -centroid.x, -centroid.y, -centroid.z);
580
+ double angle = CurveAngle(0, angleYtarget - angleYhip, 0.1f);
581
+ LA.matYRotate(matrix, angle);
582
+ LA.matTranslate(matrix, centroid.x, centroid.y, centroid.z);
583
+
584
+ LA.matConcat(matrix, toParent, toParent);
585
+
586
+ LA.matInvert(toParent, fromParent);
587
+
588
+ LA.matConcat(toParent, hip.get(0).toParent, matrix);
589
+
590
+ centroid.x = matrix[3][0];
591
+ centroid.y = matrix[3][1];
592
+ centroid.z = matrix[3][2];
593
+
594
+ double dist = LA.distance(centroid, mocaporigin);
595
+
596
+ CheckForAction(centroid);
597
+ }
29598
30599 void WriteTo(java.io.Writer writer) throws Exception
31600 {
....@@ -76,6 +645,24 @@
76645 // transient // aout 2013
77646 Object3D skeleton;
78647
648
+ void ExtractBigData(Object3D o)
649
+ {
650
+ super.ExtractBigData(o);
651
+
652
+ o.bvh = this.bvh;
653
+ o.skeleton = this.skeleton;
654
+ this.bvh = null;
655
+ this.skeleton = null;
656
+ }
657
+
658
+ void RestoreBigData(Object3D o)
659
+ {
660
+ super.RestoreBigData(o);
661
+
662
+ this.bvh = o.bvh;
663
+ this.skeleton = o.skeleton;
664
+ }
665
+
79666 boolean smoothed;
80667
81668 //boolean touched;
....@@ -99,11 +686,11 @@
99686 double pinx;
100687 double pinz;
101688
102
- double targetx;
103
- double targetz;
689
+ double targetdirx;
690
+ double targetdirz;
104691
105
- double goalx;
106
- double goalz;
692
+ double goalposx = 0; // -20;
693
+ double goalposz = 0; // -10;
107694
108695 boolean followpath;
109696
....@@ -174,7 +761,7 @@
174761 scriptactions.clear();
175762 }
176763
177
- static double EPSACTION = 0.1; // 0.075; // 0.1;
764
+ static double EPSACTION = 0.1; // 0.075; // 0.1;Came
178765
179766 void AddFromTo(cVector from, cVector to)
180767 {
....@@ -359,7 +946,7 @@
359946 // //GetFileRoot();
360947
361948 // sept 2014: //
362
- GraphreeD.RENDERME = 3; // patch for Merge objects
949
+ Grafreed.RENDERME = 3; // patch for Merge objects
363950 float[] thedata = bvh.animation.getBoneData(0);
364951
365952 os.x = (float) (path.get(i).toParent[3][0]); // - thedata[frame*6]);
....@@ -460,6 +1047,8 @@
4601047 testvect.set(from);
4611048 testvect.sub(fromto.from);
4621049
1050
+ testvect.y = 0; // PATCH
1051
+
4631052 int factor = 1;
4641053
4651054 //if (CameraPane.FAST)
....@@ -501,6 +1090,8 @@
5011090
5021091 testvect.set(from);
5031092 testvect.sub(fromto.from);
1093
+
1094
+ testvect.y = 0; // PATCH
5041095
5051096 int factor = 1;
5061097
....@@ -705,7 +1296,7 @@
7051296 // skip first node: translation
7061297 // Object3D b = input.get(0);
7071298
708
- setPose(input, f, data.getBoneData(input._index), false); //, null);
1299
+ setPose(input, f, data.getBoneData(input._index)); //, false); //, null);
7091300 }
7101301
7111302 //mocap.figure.Bone[] children = b.getChildren();
....@@ -736,6 +1327,7 @@
7361327
7371328 void SetPosition(Object3D sourcenode, cVector floor, long floorid, cVector centroid)
7381329 {
1330
+ assert(false);
7391331 //assert(CameraPane.drawMode == CameraPane.SHADOW);
7401332
7411333 Object3D transformnode = new Object3D();
....@@ -754,7 +1346,7 @@
7541346 //long
7551347 // june 2014 floorid = sourcenode.getFloor(floor); // , sourcenode.parent);
7561348
757
- CameraPane.debugpoints[0].name = "Floor = " + floorid;
1349
+ CameraPane.debugpoints[0].name = ""; // "Floor = " + 0; // floorid;
7581350 CameraPane.debugpoints[0].toParent[3][0] = floor.x;
7591351 CameraPane.debugpoints[0].toParent[3][1] = floor.y;
7601352 CameraPane.debugpoints[0].toParent[3][2] = floor.z;
....@@ -770,7 +1362,7 @@
7701362
7711363 this.count--; // currently drawing itself
7721364
773
- CameraPane.debugpoints[7].name = "Centroid = " + groundid; // centroid;
1365
+ CameraPane.debugpoints[7].name = ""; // Centroid = " + 0; // groundid; // centroid;
7741366 CameraPane.debugpoints[7].toParent[3][0] = centroid.x;
7751367 CameraPane.debugpoints[7].toParent[3][1] = centroid.y;
7761368 CameraPane.debugpoints[7].toParent[3][2] = centroid.z;
....@@ -795,7 +1387,7 @@
7951387
7961388 // jan 2014 sourcenode.parent.TransformToWorld(tmp);
7971389
798
- CameraPane.debugpoints[1].name = "C+";
1390
+ CameraPane.debugpoints[1].name = ""; // "C+";
7991391 CameraPane.debugpoints[1].toParent[3][0] = tmp.x;
8001392 CameraPane.debugpoints[1].toParent[3][1] = tmp.y;
8011393 CameraPane.debugpoints[1].toParent[3][2] = tmp.z;
....@@ -814,7 +1406,7 @@
8141406 tmp.z = pinz;
8151407 }
8161408
817
- CameraPane.debugpoints[2].name = "Pin";
1409
+ CameraPane.debugpoints[2].name = ""; // "Pin";
8181410 CameraPane.debugpoints[2].toParent[3][0] = tmp.x;
8191411 CameraPane.debugpoints[2].toParent[3][1] = tmp.y;
8201412 CameraPane.debugpoints[2].toParent[3][2] = tmp.z;
....@@ -822,7 +1414,7 @@
8221414 //if (sourcenode.parent.parent != null)
8231415 // jan 2014 sourcenode.parent.TransformToLocal(tmp); //, tmp);
8241416
825
- CameraPane.debugpoints[3].name = "C-";
1417
+ CameraPane.debugpoints[3].name = ""; // "C-";
8261418 CameraPane.debugpoints[3].toParent[3][0] = tmp.x;
8271419 CameraPane.debugpoints[3].toParent[3][1] = tmp.y;
8281420 CameraPane.debugpoints[3].toParent[3][2] = tmp.z;
....@@ -895,14 +1487,14 @@
8951487 // if (sourcenode.parent.parent != null)
8961488 // sourcenode.parent.parent.TransformToWorld(floor); //, floor);
8971489
898
- CameraPane.debugpoints[5].name = "F++";
1490
+ CameraPane.debugpoints[5].name = ""; // "F++";
8991491 CameraPane.debugpoints[5].toParent[3][0] = floor.x;
9001492 CameraPane.debugpoints[5].toParent[3][1] = floor.y;
9011493 CameraPane.debugpoints[5].toParent[3][2] = floor.z;
9021494
9031495 floor.y = tempg;
9041496
905
- CameraPane.debugpoints[6].name = "F+-";
1497
+ CameraPane.debugpoints[6].name = ""; // "F+-";
9061498 CameraPane.debugpoints[6].toParent[3][0] = floor.x;
9071499 CameraPane.debugpoints[6].toParent[3][1] = floor.y;
9081500 CameraPane.debugpoints[6].toParent[3][2] = floor.z;
....@@ -921,7 +1513,7 @@
9211513 //groundz += sourcenode.parent.toParent[3][2] - posz;
9221514 }
9231515
924
- boolean footcontact = CameraPane.FOOTCONTACT; // false;
1516
+ boolean footcontact = false; // CameraPane.FOOTCONTACT; // false;
9251517
9261518 if (footcontact && ground != -123456)
9271519 {
....@@ -938,9 +1530,10 @@
9381530
9391531 groundid = floorid;
9401532
941
- CameraPane.debugpoint.toParent[3][0] = groundx;
942
- CameraPane.debugpoint.toParent[3][1] = floor.y;
943
- CameraPane.debugpoint.toParent[3][2] = groundz;
1533
+ // green
1534
+ CameraPane.debugpointG.toParent[3][0] = groundx;
1535
+ CameraPane.debugpointG.toParent[3][1] = floor.y;
1536
+ CameraPane.debugpointG.toParent[3][2] = groundz;
9441537
9451538 if (true) // slow && stepout && onein)
9461539 {
....@@ -951,7 +1544,7 @@
9511544 // mywave = currentwave++;
9521545 // }
9531546 // sound
954
- cVector eye = CameraPane.theRenderer.eyeCamera.location;
1547
+ cVector eye = Globals.theRenderer.EyeCamera().location;
9551548
9561549 // if (sourcenode.parent.parent != null)
9571550 // sourcenode.parent.parent.TransformToWorld(floor, tmp);
....@@ -996,9 +1589,9 @@
9961589 //GraphreeD.
9971590 wav.play(volume * usedvolume); //, mywave);
9981591
999
- lastsoundtime = CameraPane.framecount;
1592
+ lastsoundtime = Globals.framecount;
10001593
1001
- GraphreeD.hassound = true;
1594
+ Grafreed.hassound = true;
10021595 }
10031596 // else
10041597 // System.out.println("skipped");
....@@ -1016,9 +1609,10 @@
10161609 // floor.z += posz;
10171610
10181611 // System.out.println("Allo " + sourcenode);
1019
- CameraPane.debugpoint2.toParent[3][0] = floor.x;// + posx;
1020
- CameraPane.debugpoint2.toParent[3][1] = ground; // floor.y;// + sourcenode.parent.toParent[3][1];
1021
- CameraPane.debugpoint2.toParent[3][2] = floor.z;// + posz;
1612
+ // purple
1613
+ CameraPane.debugpointP.toParent[3][0] = floor.x;// + posx;
1614
+ CameraPane.debugpointP.toParent[3][1] = ground; // floor.y;// + sourcenode.parent.toParent[3][1];
1615
+ CameraPane.debugpointP.toParent[3][2] = floor.z;// + posz;
10221616
10231617
10241618 if (false) // dist2 > 0.1)
....@@ -1052,7 +1646,7 @@
10521646 v0.z = groundz - floor.z;
10531647
10541648 double distance = Math.sqrt(v0.dot(v0));
1055
- double maxdist = 0.004;
1649
+ double maxdist = 0.04;
10561650
10571651 if (distance > maxdist)
10581652 {
....@@ -1078,8 +1672,27 @@
10781672 sourcenode.toParent = LA.newMatrix();
10791673 sourcenode.fromParent = LA.newMatrix();
10801674 }
1675
+
1676
+ v0.x = v0.z = 0;
1677
+
1678
+ this.get(0).TransformToWorld(v0);
1679
+
1680
+ // cyan
1681
+ CameraPane.debugpointC.toParent[3][0] = v0.x;
1682
+ CameraPane.debugpointC.toParent[3][1] = ground;
1683
+ CameraPane.debugpointC.toParent[3][2] = v0.z;
1684
+
10811685 LA.matConcat(sourcenode.toParent, transformnode.toParent, sourcenode.toParent);
10821686 LA.matInvert(sourcenode.toParent, sourcenode.fromParent);
1687
+
1688
+ v0.x = v0.z = 0;
1689
+
1690
+ this.get(0).TransformToWorld(v0);
1691
+
1692
+ // red
1693
+ CameraPane.debugpointR.toParent[3][0] = v0.x;
1694
+ CameraPane.debugpointR.toParent[3][1] = ground;
1695
+ CameraPane.debugpointR.toParent[3][2] = v0.z;
10831696 }
10841697 }
10851698
....@@ -1119,11 +1732,11 @@
11191732
11201733 if (goal != null)
11211734 {
1122
- System.err.println("GOAL change (" + sourcenode + "): " + goal + " (was " + goalx + ", " + goalz + ")");
1735
+ System.err.println("GOAL change (" + sourcenode + "): " + goal + " (was " + goalposx + ", " + goalposz + ")");
11231736 //sourcenode.parent.parent.Dump();
1124
- goalx = goal.x;
1125
- goalz = goal.z;
1126
- targetx = targetz = 0;
1737
+ goalposx = goal.x;
1738
+ goalposz = goal.z;
1739
+ targetdirx = targetdirz = 0;
11271740
11281741 followpath = true;
11291742 }
....@@ -1174,16 +1787,16 @@
11741787 // }
11751788 if (false) // !uselast)
11761789 {
1177
- CameraPane.debugpoint.toParent[3][0] = dst.x;
1178
- CameraPane.debugpoint.toParent[3][1] = dst.y;
1179
- CameraPane.debugpoint.toParent[3][2] = dst.z;
1790
+ CameraPane.debugpointG.toParent[3][0] = dst.x;
1791
+ CameraPane.debugpointG.toParent[3][1] = dst.y;
1792
+ CameraPane.debugpointG.toParent[3][2] = dst.z;
11801793 }
11811794 }
11821795
1183
- if (goalx != 0 || goalz != 0) // TODO
1796
+ if (goalposx != 0 || goalposz != 0) // TODO
11841797 {
11851798 // overwrite speaker orientation
1186
- dst.set(goalx,0,goalz);
1799
+ dst.set(goalposx,0,goalposz);
11871800 if (sourcenode.parent != null) // july 2014
11881801 sourcenode.parent.
11891802 TransformToLocal(dst);
....@@ -1199,6 +1812,7 @@
11991812 src.x = 0;
12001813 src.y = 0;
12011814 src.z = 0;
1815
+ LA.xformPos(src, get(0).get(0).toParent, src);
12021816 LA.xformPos(src, get(0).toParent, src);
12031817 LA.xformPos(src, toParent, src);
12041818 // LA.xformPos(src, rotsourcenode.toParent, src);
....@@ -1234,26 +1848,26 @@
12341848 // mars 2014
12351849 if (false) // goalx != 0 || goalz != 0)
12361850 {
1237
- targetx = dst.x - src.x;
1238
- targetz = dst.z - src.z;
1851
+ targetdirx = dst.x - src.x;
1852
+ targetdirz = dst.z - src.z;
12391853
1240
- if (Math.abs(targetx) > 0.1 || Math.abs(targetz) > 0.1)
1854
+ if (Math.abs(targetdirx) > 0.1 || Math.abs(targetdirz) > 0.1)
12411855 {
12421856 // far enough from goal. keep the goal position.
1243
- targetx = 0;
1244
- targetz = 0;
1857
+ targetdirx = 0;
1858
+ targetdirz = 0;
12451859 }
12461860 else
12471861 {
12481862 // too close to goal. switch to target direction instead.
1249
- goalx = 0;
1250
- goalz = 0;
1863
+ goalposx = 0;
1864
+ goalposz = 0;
12511865 }
12521866 }
12531867
12541868 //sourcenode.getCentroid(src, true);
12551869
1256
- if (speakernode == sourcenode && goalx == 0 && goalz == 0)
1870
+ if (speakernode == sourcenode && goalposx == 0 && goalposz == 0)
12571871 {
12581872 if (ScriptNode.lastspeaker != null)
12591873 new Exception().printStackTrace();
....@@ -1262,13 +1876,13 @@
12621876
12631877 // LA.xformPos(src, fromParent, src);
12641878
1265
- if ((ScriptNode.speaker != null && CameraPane.SPEAKERMOCAP || goalx != 0 || goalz != 0) && targetx == 0 && targetz == 0)
1879
+ if ((ScriptNode.speaker != null && CameraPane.SPEAKERMOCAP || goalposx != 0 || goalposz != 0) && targetdirx == 0 && targetdirz == 0)
12661880 dst.sub(src);
12671881 else
12681882 // vector mode
12691883 {
1270
- dst.x = targetx;
1271
- dst.z = targetz;
1884
+ dst.x = targetdirx;
1885
+ dst.z = targetdirz;
12721886
12731887 // TEST TARGET
12741888 // dst.x = CameraPane.selectedpoint.toParent[3][0];
....@@ -1318,7 +1932,7 @@
13181932
13191933 rotsourcenode.TransformToWorld(test);
13201934
1321
- CameraPane.debugpoints[4].name = "ROT = "; // + test;
1935
+ CameraPane.debugpoints[4].name = ""; // "ROT = "; // + test;
13221936 CameraPane.debugpoints[4].toParent[3][0] = test.x;
13231937 CameraPane.debugpoints[4].toParent[3][1] = test.y;
13241938 CameraPane.debugpoints[4].toParent[3][2] = test.z;
....@@ -1542,6 +2156,7 @@
15422156 toParent = LA.newMatrix();
15432157 fromParent = LA.newMatrix();
15442158 }
2159
+
15452160 LA.matConcat(toParent, rotsourcenode.toParent, toParent);
15462161 LA.matInvert(toParent, fromParent);
15472162
....@@ -1677,7 +2292,7 @@
16772292 }
16782293
16792294 if (!smoothed)
1680
- for (int i=4; --i>=0;)
2295
+ for (int i=10; --i>=0;)
16812296 SmoothAnimData(); // much reduces shakiness
16822297
16832298 smoothed = true;
....@@ -1715,9 +2330,16 @@
17152330 toVector.x = LA.cos(to);
17162331 toVector.y = LA.sin(to);
17172332
2333
+ double fromA = Math.atan2(fromVector.y, fromVector.x);
2334
+ double toA = Math.atan2(toVector.y, toVector.x);
2335
+
17182336 Vector2d currentVector = Slerp(fromVector, toVector, step);
17192337
1720
- return Math.atan2(currentVector.y, currentVector.x);
2338
+ double angle = Math.atan2(currentVector.y, currentVector.x);
2339
+
2340
+ double angle2 = (1-step) * fromA + step * toA;
2341
+
2342
+ return angle;
17212343 }
17222344
17232345 public static Vector2d Slerp(Vector2d from, Vector2d to, double step)
....@@ -1759,12 +2381,28 @@
17592381 if (!live) // aout 2013
17602382 return;
17612383
1762
- cVector centroid = new cVector();
1763
- cVector floor = new cVector();
1764
-
1765
- Object3D sourcenode = GetFileRoot();
2384
+ //bvh.skeleton.setPose(f, bvh.animation.getBoneData(bvh.skeleton.getIndex()), null);
2385
+ try
2386
+ {
2387
+ SetPose(GetSkeleton(), bvh.animation, f);
2388
+ SetCurrentBones(frame);
2389
+ }
2390
+ catch (Exception e)
2391
+ {
2392
+ e.printStackTrace();
2393
+ }
17662394
1767
- boolean success; // = sourcenode.getCentroid(centroid);
2395
+ SetHipOrientation();
2396
+
2397
+ if (true)
2398
+ return;
2399
+
2400
+ cVector centroid = new cVector();
2401
+ cVector floor = new cVector();
2402
+
2403
+ Object3D sourcenode = GetFileRoot();
2404
+
2405
+ boolean success; // = sourcenode.getCentroid(centroid);
17682406 // if (!success)
17692407 // {
17702408 // //assert(success);
....@@ -1772,16 +2410,6 @@
17722410 // System.out.println("No centroid for " + sourcenode);
17732411 // }
17742412
1775
- //bvh.skeleton.setPose(f, bvh.animation.getBoneData(bvh.skeleton.getIndex()), null);
1776
- try
1777
- {
1778
- SetPose(GetSkeleton(), bvh.animation, f);
1779
- }
1780
- catch (Exception e)
1781
- {
1782
- e.printStackTrace();
1783
- }
1784
-
17852413 if (sourcenode.parent == null && sourcenode.fileparent == null)
17862414 {
17872415 // No GFD
....@@ -1835,7 +2463,7 @@
18352463 {
18362464 SetRotation(sourcenode, new cVector(floor), new cVector(centroid));
18372465 }
1838
-
2466
+
18392467 if (setposition)
18402468 {
18412469 if (floorobject != null)
....@@ -2029,7 +2657,7 @@
20292657 * @param frame
20302658 * Frame number
20312659 */
2032
- public void setPose(Object3D bone, int frame, float[] data, boolean fade) //, Point3d offsetTrans)
2660
+ public void setPose(Object3D bone, int frame, float[] data) //, boolean fade) //, Point3d offsetTrans)
20332661 {
20342662 if (!live) // aout 2013
20352663 return;
....@@ -2037,6 +2665,33 @@
20372665 cVector temp = new cVector();
20382666 cVector temp0 = new cVector();
20392667 double pos[] = new double[3];
2668
+ double angleY = 0;
2669
+ double sinY = 0;
2670
+ double cosY = 0;
2671
+
2672
+ if (false) // bone._isRoot && firsttimeafterload && frame > 0)
2673
+ {
2674
+ bone.get(0).GlobalTransformInv();
2675
+
2676
+ temp.x = bone.get(0).globalTransform[3][0];
2677
+ temp.y = bone.get(0).globalTransform[3][1];
2678
+ temp.z = bone.get(0).globalTransform[3][2];
2679
+
2680
+ pos[0] = temp.x;
2681
+ pos[1] = temp.y;
2682
+ pos[2] = temp.z;
2683
+
2684
+ temp.x = 1;
2685
+ temp.y = 0;
2686
+ temp.z = 0;
2687
+
2688
+ LA.xformDir(temp, bone.get(0).globalTransform, temp);
2689
+
2690
+ sinY = temp.z;
2691
+ cosY = temp.x;
2692
+
2693
+ angleY = Math.atan2(-sinY, cosY);
2694
+ }
20402695
20412696 // Object3D obj = get(0);
20422697 // Object3D gp = this.parent;
....@@ -2168,13 +2823,14 @@
21682823 if (//frame > 0 &&
21692824 !bone.skipmocap &&
21702825 !bone.name.contains("head") &&
2826
+ !bone.name.contains("Head") // &&
21712827 // !bone.name.contains("rFoot") &&
21722828 // !bone.name.contains("lFoot") &&
2173
- !bone.name.contains("Pinky") &&
2174
- !bone.name.contains("Ring") &&
2175
- !bone.name.contains("Mid") &&
2176
- !bone.name.contains("Index") &&
2177
- !bone.name.contains("Thumb")
2829
+// !bone.name.contains("Pinky") &&
2830
+// !bone.name.contains("Ring") &&
2831
+// !bone.name.contains("Mid") &&
2832
+// !bone.name.contains("Index") &&
2833
+// !bone.name.contains("Thumb")
21782834 )
21792835 {
21802836 //_rotTG.setTransform(_t1);
....@@ -2207,15 +2863,17 @@
22072863 // CROWD
22082864 //cJ3D.GetTranslation(bone, _trans0);
22092865 //_trans.add(_trans0);
2210
- _transTF.setIdentity();
2866
+ //_transTF.setIdentity();
2867
+ _transTF.set(_t1);
22112868 _transTF.setTranslation(_trans);
22122869 // System.err.println("Translate: " + _transTF);
22132870 //_transTG.setTransform(_transTF);
2214
- cJ3D.ResetTransform(bone, _transTF, true); // translation node
2871
+ cJ3D.ResetTransform(bone.get(0), _transTF, true); // translation node
2872
+ //cJ3D.ResetTransform(bone, _transTF, true); // translation node
22152873 }
22162874 }
22172875
2218
- if (bone._isRoot && firsttimeafterload && frame > 0)
2876
+ if (false) // bone._isRoot && firsttimeafterload && frame > 0)
22192877 {
22202878 assert(bone == get(0));
22212879
....@@ -2231,17 +2889,17 @@
22312889 // LA.matConcat(originmatrixinv, tempmatrixinv, fromParent); // ABC * (B'*C')^-1
22322890 //
22332891
2234
- Invariants();
2235
- bone.Invariants();
2236
- bone.get(0).Invariants();
2237
- // if (origin == null)
2238
- // origin = null;
2239
- origin.Invariants();
2240
- origin0.Invariants();
2892
+ Invariants();
2893
+ bone.Invariants();
2894
+ bone.get(0).Invariants();
2895
+ // if (origin == null)
2896
+ // origin = null;
2897
+ origin.Invariants();
2898
+ origin0.Invariants();
22412899
2242
-
2243
- LA.matConcat(bone.get(0).fromParent, bone.fromParent, tempmatrix); // B' * C'
2244
- LA.matConcat(origin.toParent, tempmatrix, toParent);
2900
+
2901
+//?? LA.matConcat(bone.get(0).fromParent, bone.fromParent, tempmatrix); // B' * C'
2902
+//?? LA.matConcat(origin.toParent, tempmatrix, toParent);
22452903
22462904 // matrixToEulerXYZ(toParent, temp);
22472905 // matrixToEulerXYZ(bone.get(0).toParent, temp);
....@@ -2275,7 +2933,7 @@
22752933 //
22762934 // mat4d.get(quat);
22772935
2278
- if (true) // hip correction
2936
+ if (false) // hip correction
22792937 {
22802938 _t2.setIdentity();
22812939
....@@ -2316,13 +2974,13 @@
23162974 //????? LA.matConcat(bone.get(0).toParent, bone.toParent, tempmatrix); // B' * C'
23172975 // LA.matConcat(origin.fromParent, tempmatrix, fromParent);
23182976
2319
- LA.matInvert(toParent, fromParent);
2977
+//?? LA.matInvert(toParent, fromParent);
23202978
2321
- Invariants();
2322
- bone.Invariants();
2323
- bone.get(0).Invariants();
2324
- origin.Invariants();
2325
- origin0.Invariants();
2979
+ Invariants();
2980
+ bone.Invariants();
2981
+ bone.get(0).Invariants();
2982
+ origin.Invariants();
2983
+ origin0.Invariants();
23262984
23272985 // LA.matInvert(fromParent, tempmatrix);
23282986 //
....@@ -2343,33 +3001,39 @@
23433001 // temp.x = data[0];
23443002 // temp.y = data[1];
23453003 // temp.z = data[2];
2346
- LA.xformPos(temp, origin0.toParent, temp0);
3004
+ LA.xformPos(temp, origin0.toParent, temp0); // NU
23473005
2348
-// bone.GlobalTransformInv();
2349
-
2350
- temp0.x = bone.globalTransform[3][0];
2351
- temp0.y = bone.globalTransform[3][1];
2352
- temp0.z = bone.globalTransform[3][2];
2353
-
3006
+// bone.get(0).GlobalTransformInv();
3007
+//
3008
+// temp0.x = bone.get(0).globalTransform[3][0];
3009
+// temp0.y = bone.get(0).globalTransform[3][1];
3010
+// temp0.z = bone.get(0).globalTransform[3][2];
3011
+//
23543012 // MEGA TEST // june 2014: necessary for precision? otherwise comment works
2355
-fromParent[3][0] = 0;
2356
-fromParent[3][1] = 0;
2357
-fromParent[3][2] = 0;
2358
-LA.matInvert(fromParent, toParent);
3013
+//fromParent[3][0] = 0;
3014
+//fromParent[3][1] = 0;
3015
+//fromParent[3][2] = 0;
3016
+//LA.matInvert(fromParent, toParent);
23593017
2360
- LA.xformPos(temp0, fromParent, temp);
3018
+ LA.xformPos(temp0, fromParent, temp); // NU
23613019 //LA.xformPos(temp, bone.fromParent, temp);
23623020 // float[] data;
23633021
2364
- pos[0] = temp.x;
2365
- pos[1] = temp.y;
2366
- pos[2] = temp.z;
3022
+// pos[0] = temp.x;
3023
+// pos[1] = temp.y;
3024
+// pos[2] = temp.z;
3025
+//
3026
+// temp.x = 1;
3027
+// temp.y = 0;
3028
+// temp.z = 0;
3029
+//
3030
+// LA.xformDir(temp, bone.get(0).globalTransform, temp);
23673031
23683032 // CameraPane.selectedpoint.toParent[3][0] = temp0.x;
23693033 // CameraPane.selectedpoint.toParent[3][1] = temp0.y;
23703034 // CameraPane.selectedpoint.toParent[3][2] = temp0.z;
23713035
2372
- int numframes = bvh.animation.getNumFrames();
3036
+ int numframes = bvh.animation.getNumFrames();
23733037
23743038 int b = 0;
23753039 {
....@@ -2377,12 +3041,12 @@
23773041
23783042 int dof = 6; /// data.length/numframes;
23793043
2380
- // july 2014
2381
- if (dof != data.length/numframes)
2382
- {
2383
- System.err.println("Bone #" + b + ": dof = " + dof + " ---> " + (data.length/numframes));
2384
- dof = data.length/numframes;
2385
- }
3044
+ // july 2014
3045
+ if (dof != data.length/numframes)
3046
+ {
3047
+ System.err.println("Bone #" + b + ": dof = " + dof + " ---> " + (data.length/numframes));
3048
+ dof = data.length/numframes;
3049
+ }
23863050
23873051
23883052 int theframe = 0; // baseframe;
....@@ -2434,17 +3098,26 @@
24343098 // }
24353099 // }
24363100
2437
- data[f3 + i] += pos[i] - data[frame3 + i];
3101
+ data[f3 + i] += /*pos[i]*/ - data[frame3 + i];
24383102
24393103 // if (f < 3)
24403104 // {
24413105 // System.out.print(data[f3 + i] + " ");
24423106 // }
24433107 }
2444
-// if (f < 3)
2445
-// {
2446
-// System.out.println();
2447
-// }
3108
+
3109
+ double t1 = data[f3 + 0];
3110
+ double t2 = data[f3 + 2];
3111
+
3112
+ data[f3 + 0] = (float)(cosY*t1 - sinY*t2);
3113
+ data[f3 + 2] = (float)(sinY*t1 + cosY*t2);
3114
+
3115
+ for (int i=3/*dof*/; --i>=0;)
3116
+ {
3117
+ data[f3 + i] += pos[i];
3118
+ }
3119
+
3120
+ data[f3 + 4] += angleY - data[frame3 + 4];
24483121 }
24493122 }
24503123
....@@ -2458,186 +3131,17 @@
24583131 // temp.y = data[1];
24593132 // temp.z = data[2];
24603133
2461
- if (fade && currentbones != null && !CameraPane.fullreset)
2462
- {
2463
- Quat4d quatstart = new Quat4d();
2464
- Quat4d quatend = new Quat4d();
2465
- Quat4d quat = new Quat4d();
2466
- Matrix4d mat4d = new Matrix4d();
2467
- double[][] rot = new double[4][4];
2468
-
2469
- for (b=numbones; --b>=1;) // HIP ROTATION: 0;)
2470
- {
2471
- int hipindex = get(0)._index;
2472
-
2473
-// assert(get(0).get(0)._isHip);
2474
-
2475
- // if (b == hipindex)
2476
- // continue;
2477
-
2478
- data = bvh.animation.getBoneData(b);
2479
-
2480
- int dof = 3; // data.length/numframes;
2481
-
2482
- // assert(dof == 3);
2483
-
2484
- int boneframe3 = b*3; // dof;
2485
-
2486
- // System.err.println("Bone #" + b + ": dof = " + dof);
2487
- int fadein = 45; // 120;
2488
-
2489
- // if (b == hipindex)
2490
- // fadein *= 5;
2491
-
2492
- if (fadein > numframes)
2493
- fadein = 0; // numframes;
2494
-
2495
- for (int fi=fadein; --fi>=0;)
2496
- //for (int f=numframes; --f>=0;)
2497
- {
2498
- int f = fi + GetFirstFrame();
2499
-
2500
- int f3 = f*dof;
2501
-
2502
- float k = fi;
2503
-
2504
- k /= fadein - 1;
2505
-
2506
- if (Float.isNaN(k))
2507
- k = 1; // 0/0
2508
-
2509
- k = (float) (-Math.cos(k*Math.PI));
2510
- k += 1;
2511
- k /= 2;
2512
-
2513
- int start = 3;
2514
- int end = 0;
2515
-
2516
- if (dof == 6)
2517
- {
2518
- start = 6;
2519
- end = 3;
2520
- }
2521
-
2522
- if (b == 0)
2523
- {
2524
- _t1.setIdentity();
2525
- _t2.setIdentity();
2526
- _t2.rotZ(currentbones[boneframe3 + start-1-end]);
2527
- _t1.mul(_t2);
2528
- _t2.setIdentity();
2529
- if (b == 0)
2530
- {
2531
- _t2.rotY(currentbones[boneframe3 + start-2-end]);
2532
- _t1.mul(_t2);
2533
- _t2.setIdentity();
2534
- _t2.rotX(currentbones[boneframe3 + start-3-end]);
2535
- }
2536
- else
2537
- {
2538
- _t2.rotX(currentbones[boneframe3 + start-2-end]);
2539
- _t1.mul(_t2);
2540
- _t2.setIdentity();
2541
- _t2.rotY(currentbones[boneframe3 + start-3-end]);
2542
- }
2543
- _t1.mul(_t2);
2544
- _t2.setIdentity();
2545
-
2546
- _t1.get(mat4d);
2547
-
2548
- mat4d.get(quatstart);
2549
-
2550
- _t1.setIdentity();
2551
- _t2.setIdentity();
2552
- _t2.rotZ(data[f3 + start-1]);
2553
- _t1.mul(_t2);
2554
- _t2.setIdentity();
2555
- if (b == 0)
2556
- {
2557
- _t2.rotY(data[f3 + start-2]);
2558
- _t1.mul(_t2);
2559
- _t2.setIdentity();
2560
- _t2.rotX(data[f3 + start-3]);
2561
- }
2562
- else
2563
- {
2564
- _t2.rotX(data[f3 + start-2]);
2565
- _t1.mul(_t2);
2566
- _t2.setIdentity();
2567
- _t2.rotY(data[f3 + start-3]);
2568
- }
2569
-
2570
- _t1.mul(_t2);
2571
- _t2.setIdentity();
2572
-
2573
- _t1.get(mat4d);
2574
-
2575
- mat4d.get(quatend);
2576
-
2577
- double dot = quatstart.x*quatend.x +
2578
- quatstart.y*quatend.y +
2579
- quatstart.z*quatend.z +
2580
- quatstart.w*quatend.w
2581
- ;
2582
-
2583
- if (dot < 0)
2584
- {
2585
- quatend.x *= -1;
2586
- quatend.y *= -1;
2587
- quatend.z *= -1;
2588
- quatend.w *= -1;
2589
- }
2590
-
2591
- // k = 1-k;
2592
-
2593
- quat.x = (1-k)*quatstart.x + k*quatend.x;
2594
- quat.y = (1-k)*quatstart.y + k*quatend.y;
2595
- quat.z = (1-k)*quatstart.z + k*quatend.z;
2596
- quat.w = (1-k)*quatstart.w + k*quatend.w;
2597
-
2598
- quat.normalize();
2599
-
2600
- mat4d.set(quat);
2601
-
2602
- cJ3D.SetTransform(rot, mat4d);
2603
-
2604
- matrixToEulerXYZ(rot, temp);
2605
-
2606
- data[f3 + start-1] = -(float)temp.z;
2607
-
2608
- if (b == 0)
2609
- {
2610
- data[f3 + start-2] = -(float)temp.y;
2611
- data[f3 + start-3] = -(float)temp.x;
2612
- }
2613
- else
2614
- {
2615
- data[f3 + start-2] = -(float)temp.x;
2616
- data[f3 + start-3] = -(float)temp.y;
2617
- }
2618
- }
2619
- else
2620
- {
2621
- for (int i=start; --i>=end;)
2622
- {
2623
- //data[f3 + i] += pos[i] - data[frame3 + i];
2624
- // data[f3 + i] = k*data[f3+i] + (1-k)*
2625
- // currentbones[boneframe3 + i-end];
2626
- data[f3 + i] = (float)CurveAngle(data[f3+i], currentbones[boneframe3 + i-end], 1-k);
2627
- }
2628
- }
2629
-
2630
- }
2631
- }
2632
-
2633
- }
3134
+// if (fade && currentbones != null && !CameraPane.fullreset)
3135
+// {
3136
+// Fade();
3137
+// }
26343138 }
2635
-
3139
+
26363140 if (false) // doesn't change anything bone._isRoot)
26373141 {
26383142 // Reset orientation
26393143 _t2.setIdentity();
2640
-
3144
+
26413145 double tx = bone.toParent[3][0];
26423146 double ty = bone.toParent[3][1];
26433147 double tz = bone.toParent[3][2];
....@@ -2646,9 +3150,9 @@
26463150 temp.y = 0;
26473151 temp.z = 0;
26483152 LA.xformDir(temp, bone.toParent, temp);
2649
-
3153
+
26503154 double angle = Math.atan2(-temp.z, temp.x);
2651
-
3155
+
26523156 _t2.rotY(angle);
26533157 // _t1.setIdentity();
26543158 // _t1.rotX(temp.x);
....@@ -2661,56 +3165,21 @@
26613165 // _t1.setIdentity();
26623166 // _t1.rotZ(temp.z);
26633167 // _t2.mul(_t1);
2664
-
3168
+
26653169 cJ3D.ResetTransform(bone, _t2, false);
2666
-
3170
+
26673171 bone.toParent[3][0] = tx;
26683172 bone.toParent[3][1] = ty;
26693173 bone.toParent[3][2] = tz;
26703174 }
26713175 }
26723176
2673
- if (currentbones == null)
2674
- currentbones = new double[numbones*3];
2675
-
2676
- for (int b=numbones; --b>=1;) // 0;)
2677
- //int b = 0;
2678
- {
2679
- data = bvh.animation.getBoneData(b);
2680
-
2681
- int numframes = bvh.animation.getNumFrames();
2682
-
2683
- int dof = 6; // data.length/numframes;
2684
-
2685
- if (b > 0)
2686
- dof = 3;
2687
-
2688
- //assert(dof == 3);
2689
-
2690
- // System.err.println("Bone #" + b + ": dof = " + dof);
2691
- int theframe = // 1; // baseframe;
2692
- frame;
2693
-
2694
- int frame3 = theframe*dof;
2695
- int bone3 = b*3; // dof;
2696
-
2697
- int start = 3;
2698
- int end = 0;
2699
-
2700
- if (dof == 6)
2701
- {
2702
- start = 6;
2703
- end = 3;
2704
- }
2705
- for (int i=start; --i>=end;)
2706
- {
2707
- currentbones[bone3 + i-end] = data[frame3 + i];
2708
- }
2709
- }
3177
+ // SetCurrentBones(frame);
27103178 }
27113179 }
27123180
2713
- static int offset = 1; // 5; // 10; // 5; // 100; // skip initial "T"
3181
+ // skip initial "T"
3182
+ static int offset = 1; // 5; // 10; // 5; // 100;
27143183
27153184 void ReadBVH()
27163185 {
....@@ -2739,14 +3208,14 @@
27393208
27403209 void Reset()
27413210 {
2742
- if (fullname != null)
2743
- ReadBVH();
3211
+// if (fullname != null)
3212
+// ReadBVH();
27443213
27453214 Object3D hip = get(0);
27463215
27473216 // assert(obj.name.equals("hip"));
27483217
2749
- Object3D rot = hip.get(0);
3218
+ //Object3D rot = hip.get(0);
27503219
27513220 // assert(obj.name == null); // .equals("hip#"));
27523221
....@@ -2756,8 +3225,8 @@
27563225 hip.fromParent = LA.newMatrix();
27573226 }
27583227
2759
- hip.toParent[3][0] = hip.toParent[3][1] = hip.toParent[3][2] = 0;
2760
- hip.fromParent[3][0] = hip.fromParent[3][1] = hip.fromParent[3][2] = 0;
3228
+ //hip.toParent[3][0] = hip.toParent[3][1] = hip.toParent[3][2] = 0;
3229
+ //hip.fromParent[3][0] = hip.fromParent[3][1] = hip.fromParent[3][2] = 0;
27613230
27623231 if (toParent == null)
27633232 {
....@@ -2769,26 +3238,29 @@
27693238 LA.matIdentity(fromParent);
27703239 // LA.matIdentity(hip.toParent);
27713240 // LA.matIdentity(hip.fromParent);
2772
- if (rot.toParent == null)
2773
- {
2774
- // june 2014
2775
- rot.toParent = LA.newMatrix();
2776
- rot.fromParent = LA.newMatrix();
2777
- }
2778
- LA.matIdentity(rot.toParent);
2779
- LA.matIdentity(rot.fromParent);
3241
+// if (rot.toParent == null)
3242
+// {
3243
+// // june 2014
3244
+// rot.toParent = LA.newMatrix();
3245
+// rot.fromParent = LA.newMatrix();
3246
+// }
3247
+// LA.matIdentity(rot.toParent);
3248
+// LA.matIdentity(rot.fromParent);
27803249
27813250 // july 2014
2782
- goalx = goalz = 0;
2783
- targetx = targetz = 0;
3251
+// goalx = goalz = 0;
3252
+ targetdirx = targetdirz = 0;
27843253
2785
- SetPositionDelta(true, true, true, false);
3254
+ //SetPositionDelta(true, true, true, false);
3255
+// LoadData();
3256
+// Rewind();
27863257
27873258 baseframe = frame = 0; // T pose. No offset.
27883259
27893260 // aout 2013 endframe = 0; // june 2013
27903261
2791
- setPose(frame);
3262
+ ResetZero();
3263
+ //setPose(frame);
27923264 }
27933265
27943266 static int mocapsupport = 0;
....@@ -2806,12 +3278,13 @@
28063278
28073279 int step = 1;
28083280
3281
+ // patch for running hare
28093282 if (speedup) // fev 2014
28103283 step *= 2; // 4;
28113284 if (rewind) // mars 2014
28123285 step *= 4;
28133286
2814
- if (CameraPane.FAST) // && !CameraPane.HOLD)
3287
+ //if (CameraPane.FAST) // && !CameraPane.HOLD)
28153288 step *= CameraPane.STEP;
28163289
28173290 //System.err.println("Step Mocap frame # " + frame);
....@@ -2819,7 +3292,7 @@
28193292 baseframe += step;
28203293
28213294 //frame = baseframe;
2822
- frame += step;
3295
+ //frame += step;
28233296
28243297 // if (frame != baseframe)
28253298 // {
....@@ -2833,6 +3306,7 @@
28333306 if (lastframetest == 0)
28343307 lastframetest = bvh.animation.getNumFrames();
28353308
3309
+ // WARNING: RESET DESTROYS EVERYTHING
28363310 if (baseframe >= lastframetest) // july 2013 // - GetFirstFrame())
28373311 {
28383312 System.out.println("MOCAP reset: " + this.GetFileRoot() +
....@@ -2842,7 +3316,7 @@
28423316 "; fullname = " + fullname);
28433317
28443318 //int delta = frame - baseframe;
2845
- if (CameraPane.CROWD)
3319
+ if (Globals.CROWD)
28463320 {
28473321 baseframe = GetFirstFrame(); // 0 initial point
28483322 }
....@@ -2851,29 +3325,53 @@
28513325 // SetPositionDelta(false, true, false); // ?? false);
28523326 {
28533327 if (support == null)
2854
- ObjEditor.LoadBVHFile(fullname, this, false, beginframe, lastframetest);
2855
- else
28563328 {
2857
- try
3329
+ if (bvh == null && new File(fullname).exists())
3330
+ ObjEditor.LoadBVHFile(fullname, this, false, beginframe, lastframetest);
3331
+ else
28583332 {
2859
- bvh = ((Mocap)support.get(mocapsupport++ % support.Size())).bvh;
2860
-
2861
- SetPositionDelta(false, true, true, true);
2862
- }
2863
- catch (Exception e)
2864
- {
2865
- e.printStackTrace();
2866
- ObjEditor.LoadBVHFile(fullname, this, false, beginframe, lastframetest);
3333
+ SetGlobalTransform();
3334
+ Rewind();
3335
+ Fade();
28673336 }
28683337 }
3338
+ else
3339
+ {
3340
+// try
3341
+// {
3342
+ bvh = ((Mocap)support.get(mocapsupport++ % support.Size())).bvh;
3343
+
3344
+ // SetPositionDelta(false, true, true, true);
3345
+ LoadData();
3346
+ Rewind();
3347
+ Fade();
3348
+// }
3349
+// catch (Exception e)
3350
+// {
3351
+// System.err.println("An error occured while loading data. Use fallback by loading the file.");
3352
+// //e.printStackTrace();
3353
+// try
3354
+// {
3355
+// ObjEditor.LoadBVHFile(fullname, this, false, beginframe, lastframetest);
3356
+// }
3357
+// catch (Exception e2)
3358
+// {
3359
+// System.err.println("Motion file not found: " + fullname);
3360
+// }
3361
+// }
3362
+ }
28693363 }
3364
+
3365
+ frame = GetFirstFrame();
28703366 }
3367
+ else
3368
+ frame += step;
28713369
28723370 //SetPositionDelta(false);
28733371
2874
- if (frame >= bvh.animation.getNumFrames())
2875
- //baseframe =
2876
- frame = GetFirstFrame(); // 0; // offset; // initial point
3372
+// if (frame >= bvh.animation.getNumFrames())
3373
+// //baseframe =
3374
+// frame = GetFirstFrame(); // 0; // offset; // initial point
28773375
28783376 //System.err.println("frame = " + frame);
28793377 if (lastframe != 0)
....@@ -3042,6 +3540,7 @@
30423540 // filters out bad input data
30433541 void FilterAnimData()
30443542 {
3543
+ new Exception().printStackTrace();
30453544 System.exit(0);
30463545
30473546 float[] data; // = bvh.animation.getBoneData(0);
....@@ -3171,6 +3670,8 @@
31713670 //static
31723671 transient
31733672 double[] currentbones;
3673
+ double[] currenthip;
3674
+
31743675 transient boolean inbetween;
31753676
31763677 void SetPositionDelta(boolean reset, boolean rewind, boolean load, boolean fade)
....@@ -3181,38 +3682,9 @@
31813682 //assert(dim == numframes*6);
31823683
31833684 if (load)
3184
- for (int b=numbones; --b>=0;)
3185
- //int b = 0;
3186
- {
3187
- float[] thedata = bvh.animation.getBoneData(b);
3188
-
3189
- int numframes = bvh.animation.getNumFrames();
3190
-
3191
- int dof = 6; // thedata.length/numframes;
3192
-
3193
- if (b > 0)
3194
- dof = 3;
3195
-
3196
- if (dof != thedata.length/numframes)
3197
- {
3198
- System.err.println("Bone #" + b + ": dof = " + dof + " ---> " + (thedata.length/numframes));
3199
- dof = thedata.length/numframes;
3200
- }
3201
-
3202
- //for (int f=numframes; --f>=offset;)
3203
- int firstframe = GetFirstFrame();
3204
- for (int f=0; f<numframes-firstframe; f++)
3205
- {
3206
- int f3 = f*dof;
3207
-
3208
- //for (int i=3/*dof*/; --i>=0;)
3209
- for (int i=dof; --i>=0;)
3210
- {
3211
- //thedata[f3 + i] += thedata[i] - thedata[offset*dof + i];
3212
- thedata[f3 + i] = thedata[f3 + firstframe*dof + i];
3213
- }
3214
- }
3215
- }
3685
+ {
3686
+ LoadData();
3687
+ }
32163688
32173689 // assert(thedata[0] == 0);
32183690 // assert(thedata[1] == 0);
....@@ -3222,11 +3694,11 @@
32223694 // assert(thedata[7] == 0);
32233695 // assert(thedata[8] == 0);
32243696
3225
- Object3D obj = get(0);
3697
+ Object3D hip = get(0);
32263698
32273699 // assert(obj.name.equals("hip"));
32283700
3229
- Object3D rot = obj.get(0);
3701
+ Object3D rot = hip.get(0);
32303702
32313703 // if (toParent == null)
32323704 // {
....@@ -3238,7 +3710,7 @@
32383710 // // assert(obj.name == null); // .equals("hip#"));
32393711
32403712 Invariants();
3241
- obj.Invariants();
3713
+ hip.Invariants();
32423714 rot.Invariants();
32433715
32443716 if (origin == null)
....@@ -3259,16 +3731,16 @@
32593731 fromParent = LA.newMatrix();
32603732 }
32613733
3262
- if (obj.toParent == null) // june 2014
3734
+ if (hip.toParent == null) // june 2014
32633735 {
3264
- obj.toParent = LA.newMatrix();
3265
- obj.fromParent = LA.newMatrix();
3736
+ hip.toParent = LA.newMatrix();
3737
+ hip.fromParent = LA.newMatrix();
32663738 }
32673739
3268
- LA.matConcat(toParent, obj.toParent, origin0.toParent); // AB
3740
+ LA.matConcat(toParent, hip.toParent, origin0.toParent); // AB
32693741 Object3D gp = this.parent;
32703742 this.parent = null;
3271
- obj.GlobalTransformInv();
3743
+ hip.GlobalTransformInv();
32723744 this.parent = gp;
32733745
32743746 if (rot.toParent == null)
....@@ -3291,41 +3763,41 @@
32913763 LA.matInvert(origin.toParent, origin.fromParent);
32923764
32933765 Invariants();
3294
- obj.Invariants();
3766
+ hip.Invariants();
32953767 rot.Invariants();
32963768 origin.Invariants();
32973769 origin0.Invariants();
32983770
3299
- firsttimeafterload = true;
3771
+ firsttimeafterload = false; // true;
33003772
33013773 if (rewind)
33023774 Rewind();
33033775
3304
- setPose(obj, frame, bvh.animation.getBoneData(obj._index), fade);
3776
+ setPose(hip, frame, bvh.animation.getBoneData(hip._index)); //, fade);
33053777
3306
- if (true)
3307
- return;
3778
+ if (true)
3779
+ return;
33083780
33093781 double pos[] = new double[6];
33103782
33113783 if (!reset)
33123784 {
3313
- assert(obj.tx == obj.toParent[3][0]);
3314
- assert(obj.ty == obj.toParent[3][1]);
3315
- assert(obj.tz == obj.toParent[3][2]);
3785
+ assert(hip.tx == hip.toParent[3][0]);
3786
+ assert(hip.ty == hip.toParent[3][1]);
3787
+ assert(hip.tz == hip.toParent[3][2]);
33163788
3317
- pos[0] = obj.tx; // obj.toParent[3][0];
3318
- pos[1] = obj.ty; // obj.toParent[3][1];
3319
- pos[2] = obj.tz; // obj.toParent[3][2];
3320
- pos[3] = obj.rz;
3321
- pos[4] = obj.ry;
3322
- pos[5] = obj.rx;
3789
+ pos[0] = hip.tx; // obj.toParent[3][0];
3790
+ pos[1] = hip.ty; // obj.toParent[3][1];
3791
+ pos[2] = hip.tz; // obj.toParent[3][2];
3792
+ pos[3] = hip.rz;
3793
+ pos[4] = hip.ry;
3794
+ pos[5] = hip.rx;
33233795 }
33243796
33253797 cVector temp = new cVector();
3326
- temp.x = obj.globalTransform[3][0];
3327
- temp.y = obj.globalTransform[3][1];
3328
- temp.z = obj.globalTransform[3][2];
3798
+ temp.x = hip.globalTransform[3][0];
3799
+ temp.y = hip.globalTransform[3][1];
3800
+ temp.z = hip.globalTransform[3][2];
33293801 // LA.xformPos(temp, origin0.toParent, temp);
33303802 // System.err.println("POS0 = " + temp.x + ", " + temp.y + ", " + temp.z + ";");
33313803
....@@ -3409,7 +3881,7 @@
34093881 }
34103882
34113883 // Rewind();
3412
- setPose(obj, frame, bvh.animation.getBoneData(obj._index), true);
3884
+ setPose(hip, frame, bvh.animation.getBoneData(hip._index)); // , true);
34133885 }
34143886
34153887 void Rewind()
....@@ -3426,7 +3898,7 @@
34263898
34273899 transient boolean restarted; // CROWD issue?
34283900
3429
- void drawSelf(CameraPane display, Object3D /*Composite*/ root, boolean selected, boolean blocked)
3901
+ void drawSelf(iCameraPane display, Object3D /*Composite*/ root, boolean selected, boolean blocked)
34303902 {
34313903 //System.err.println("drawSelf Mocap frame # " + frame);
34323904 //System.err.println("drawSelf Mocap baseframe # " + baseframe);
....@@ -3443,17 +3915,22 @@
34433915 // if (firstframe)
34443916 // return;
34453917
3446
- if (!restarted && /*display.restartframe &&*/
3447
- display.isLIVE() && live && display.drawMode == display.SHADOW) // FUCK
3918
+ if (//!restarted && /*display.restartframe &&*/
3919
+ Globals.isLIVE() && live && (display.DrawMode() == iCameraPane.SHADOW || !Globals.RENDERSHADOW || !Globals.COMPUTESHADOWWHENLIVE))
34483920 {
34493921 //display.restartframe = false;
34503922 restarted = true;
3923
+ //System.err.println("restarted = true");
34513924 Step();
34523925 }
34533926 else
34543927 {
3455
- if (display.isLIVE() && live && display.drawMode != display.SHADOW)
3928
+ //System.err.println("restarted");
3929
+ if (Globals.isLIVE() && live && display.DrawMode() != iCameraPane.SHADOW)
3930
+ {
34563931 restarted = false;
3932
+ //System.err.println("restarted = false");
3933
+ }
34573934 }
34583935
34593936 super.drawSelf(display, root, selected, blocked);