Normand Briere
2019-04-22 91106535bc5aa5e67cbb02a67cf6de1519cba0e4
CameraPane.java
....@@ -31,8 +31,12 @@
3131
3232 import gleem.linalg.Mat4f;
3333
34
-class CameraPane extends GLCanvas implements Runnable, GLEventListener, ActionListener, MouseWheelListener, MouseMotionListener, MouseListener, KeyListener
34
+class CameraPane extends GLCanvas implements iCameraPane, Runnable, GLEventListener, ActionListener, MouseWheelListener, MouseMotionListener, MouseListener, KeyListener
3535 {
36
+ static cMaterial[] materialstack = new cMaterial[65536];
37
+ static boolean[] selectedstack = new boolean[65536];
38
+ static int materialdepth = 0;
39
+
3640 static boolean DEBUG = false;
3741 static boolean FRUSTUM = false; // still bogus true; // frustum culling
3842
....@@ -42,25 +46,7 @@
4246
4347 static int STEP = 1;
4448
45
- static boolean ONESTEP = false; // do LIVE once
46
-
47
- /**
48
- * @return the LIVE
49
- */
50
- public static boolean isLIVE()
51
- {
52
- return LIVE || ONESTEP;
53
- }
54
-
55
- /**
56
- * @param aLIVE the LIVE to set
57
- */
58
- public static void setLIVE(boolean aLIVE)
59
- {
60
- LIVE = aLIVE;
61
- }
62
-
63
- /*static*/ boolean CULLFACE = false; // true;
49
+ /*static*/ private boolean CULLFACE = false; // true;
6450 /*static*/ boolean NEAREST = false; // true;
6551 /*static*/ boolean WIREFRAME = false; // true;
6652
....@@ -97,10 +83,8 @@
9783
9884 static boolean textureon = true;
9985 static boolean LOCALTRANSFORM = false;
100
-private static boolean LIVE = false;
10186 static boolean FULLSCREEN = false;
10287 static boolean SUPPORT = true;
103
-static boolean CROWD = false;
10488 static boolean INERTIA = true;
10589 static boolean FAST = false;
10690 static boolean SLOWPOSE = false;
....@@ -173,17 +157,47 @@
173157 theRenderer = this;
174158 }
175159
160
+ CameraPane(Object3D o, Camera cam, boolean withcontext)
161
+ {
162
+ super(defaultcaps, null, withcontext?glcontext:null, null);
163
+
164
+ //System.out.println("AMERICA AREA = " + (9458886 + 9210755 + 8480395 + 2736391 + 1943018 + 1289475 + 1141569 + 1069350 + 911559 + 721229 + 395886 + 377972 + 246700 + 211156 + 173985 + 141133 + 118279 + 112079 + 108523));
165
+ glcontext = getContext();
166
+
167
+ cameras = new Camera[2];
168
+ targetLookAts = new cVector[2];
169
+
170
+ SetCamera(cam);
171
+
172
+ SetLight(new Camera(new cVector(10, 10, -20)));
173
+
174
+ object = o;
175
+
176
+ setBackground(Color.white);
177
+
178
+ addKeyListener(this);
179
+ addMouseListener(this);
180
+ addMouseMotionListener(this);
181
+ addMouseWheelListener(this);
182
+ //System.out.println("addGLEventListener: " + this);
183
+ addGLEventListener(this);
184
+
185
+// pingthread.start(); // may 2013
186
+ }
187
+
176188 static boolean AntialiasingEnabled()
177189 {
178190 return CURRENTANTIALIAS > 0;
179191 }
180192
181
- void ClearDepth()
193
+ /// INTERFACE
194
+
195
+ public void ClearDepth()
182196 {
183197 GetGL().glClear(GetGL().GL_DEPTH_BUFFER_BIT);
184198 }
185199
186
- void DepthTest(boolean depthtest)
200
+ public void DepthTest(boolean depthtest)
187201 {
188202 if (depthtest)
189203 GetGL().glDepthFunc(GL.GL_LEQUAL);
....@@ -191,7 +205,7 @@
191205 GetGL().glDepthFunc(GL.GL_ALWAYS);
192206 }
193207
194
- void DepthWrite(boolean depthwrite)
208
+ public void DepthWrite(boolean depthwrite)
195209 {
196210 if (depthwrite)
197211 GetGL().glDepthMask(true);
....@@ -199,12 +213,776 @@
199213 GetGL().glDepthMask(false);
200214 }
201215
202
- void BackFaceCull(boolean bfc)
216
+ public void BackFaceCull(boolean bfc)
203217 {
204218 if (bfc)
205219 GetGL().glEnable(GetGL().GL_CULL_FACE);
206220 else
207221 GetGL().glDisable(GetGL().GL_CULL_FACE);
222
+ }
223
+
224
+ public boolean BackFaceCullMode()
225
+ {
226
+ return this.CULLFACE;
227
+ }
228
+
229
+ public boolean IsAmbientOcclusionOn()
230
+ {
231
+ return this.ambientOcclusion;
232
+ }
233
+
234
+ public boolean IsFrozen()
235
+ {
236
+ boolean selectmode = this.DrawMode() == SELECTION || CameraPane.DEBUG_SELECTION;
237
+
238
+ return !selectmode && cameracount == 0; // != 0;
239
+ }
240
+
241
+ // Currently in Globals
242
+ public int DrawMode()
243
+ {
244
+ return Globals.DrawMode();
245
+ }
246
+
247
+ public Camera EyeCamera()
248
+ {
249
+ return eyeCamera;
250
+ }
251
+
252
+ public Camera LightCamera()
253
+ {
254
+ return lightCamera;
255
+ }
256
+
257
+ public Camera RenderCamera()
258
+ {
259
+ return renderCamera;
260
+ }
261
+
262
+ public void PushMaterial(Object3D obj, boolean selected)
263
+ {
264
+ CameraPane display = this;
265
+ javax.media.opengl.GL gl = display.GetGL();
266
+ cMaterial material = obj.material;
267
+
268
+ if (material != null)
269
+ {
270
+ materialstack[materialdepth] = material;
271
+ selectedstack[materialdepth] = selected;
272
+ cStatic.objectstack[materialdepth++] = obj;
273
+ //System.out.println("material " + material);
274
+ //Applet3D.tracein(this, selected);
275
+ display.vector2buffer = obj.projectedVertices;
276
+ if (obj instanceof Camera)
277
+ {
278
+ display.options1[0] = material.shift;
279
+ //System.out.println("shift " + material.shift);
280
+ display.options1[1] = material.lightarea;
281
+ display.options1[2] = material.shadowbias;
282
+ display.options1[3] = material.aniso;
283
+ display.options1[4] = material.anisoV;
284
+ display.options2[0] = material.opacity;
285
+ display.options2[1] = material.diffuse;
286
+ display.options2[2] = material.factor;
287
+
288
+ cColor.HSBtoRGB(material.color, material.modulation, 1, display.options3);
289
+ display.options4[0] = material.cameralight/0.2f;
290
+ display.options4[1] = material.subsurface;
291
+ display.options4[2] = material.sheen;
292
+
293
+ // if (display.CURRENTANTIALIAS > 0)
294
+ // display.options3[3] /= 4;
295
+
296
+ /*
297
+ System.out.println("Focus = " + display.options1[0]);
298
+ System.out.println("Aperture = " + display.options1[1]);
299
+ System.out.println("ShadowBlur = " + display.options1[2]);
300
+ System.out.println("Antialiasing = " + display.options1[3]);
301
+ System.out.println("Fog = " + display.options2[0]);
302
+ System.out.println("Intensity = " + display.options2[1]);
303
+ System.out.println("Elevation = " + display.options2[2]);
304
+ /**/
305
+ } else
306
+ {
307
+ DrawMaterial(material, selected);
308
+ }
309
+ } else
310
+ {
311
+ if (selected && CameraPane.flash)
312
+ {
313
+ display.modelParams4[1] = 100;
314
+ gl.glProgramEnvParameter4fvARB(gl.GL_FRAGMENT_PROGRAM_ARB, 4, display.modelParams4, 0);
315
+ }
316
+ }
317
+ }
318
+
319
+ public void PushMaterial2(Object3D obj, boolean selected)
320
+ {
321
+ CameraPane display = this;
322
+ cMaterial material = obj.material;
323
+
324
+ if (material != null)
325
+ {
326
+ materialstack[materialdepth] = material;
327
+ selectedstack[materialdepth] = selected;
328
+ cStatic.objectstack[materialdepth++] = obj;
329
+ //System.out.println("material " + material);
330
+ //Applet3D.tracein("selected ", selected);
331
+ display.vector2buffer = obj.projectedVertices;
332
+ display.DrawMaterial(material, selected);
333
+ }
334
+ }
335
+
336
+ public void PopMaterial(Object3D obj, boolean selected)
337
+ {
338
+ CameraPane display = this;
339
+ javax.media.opengl.GL gl = display.GetGL();
340
+ cMaterial material = obj.material;
341
+
342
+ //if (parent != null && parent.GetMaterial() != null)
343
+ // parent.GetMaterial().Draw(display, parent.IsSelected(this));
344
+ if (material != null)
345
+ {
346
+ materialdepth -= 1;
347
+ if (materialdepth > 0)
348
+ {
349
+ display.vector2buffer = cStatic.objectstack[materialdepth - 1].projectedVertices;
350
+ display.DrawMaterial(materialstack[materialdepth - 1], selectedstack[materialdepth - 1]);
351
+ }
352
+ //Applet3D.traceout("selected ", (stackdepth>0)?selectedstack[stackdepth-1]:"???");
353
+ } else if (selected && CameraPane.flash && obj.GetMaterial() != null)
354
+ {
355
+ display.modelParams4[1] = obj.GetMaterial().cameralight;
356
+ gl.glProgramEnvParameter4fvARB(gl.GL_FRAGMENT_PROGRAM_ARB, 4, display.modelParams4, 0);
357
+ }
358
+ }
359
+
360
+ public void PopMaterial2(Object3D obj)
361
+ {
362
+ CameraPane display = this;
363
+ cMaterial material = obj.material;
364
+
365
+ if (material != null)
366
+ {
367
+ materialdepth -= 1;
368
+ if (materialdepth > 0)
369
+ {
370
+ display.vector2buffer = cStatic.objectstack[materialdepth - 1].projectedVertices;
371
+ display.DrawMaterial(materialstack[materialdepth - 1], selectedstack[materialdepth - 1]);
372
+ }
373
+ //Applet3D.traceout("selected ", (stackdepth>0)?selectedstack[stackdepth-1]:"???");
374
+ //else
375
+ //material.Draw(display, false);
376
+ }
377
+ }
378
+
379
+ public void DrawFace(Object3D obj, Vertex pv, Vertex qv, Vertex rv, Face face)
380
+ {
381
+ CameraPane display = this;
382
+
383
+ if (pv.y == -10000 ||
384
+ qv.y == -10000 ||
385
+ rv.y == -10000)
386
+ return;
387
+
388
+// float b = f.nbiterations & 1;
389
+// float g = (f.nbiterations>>1) & 1;
390
+// float r = (f.nbiterations>>2) & 1;
391
+//
392
+// //if (f.weight == 10000)
393
+// //{
394
+// // r = 1; g = b = 0;
395
+// //}
396
+// //else
397
+// //{
398
+// // assert(f.weight < 10000);
399
+// r = g = b = (float)bRep.FaceWeight(f)*100;
400
+// if (r<0)
401
+// assert(r>=0);
402
+// //}
403
+
404
+ javax.media.opengl.GL gl = display.GetGL();
405
+
406
+ boolean selectmode = display.DrawMode() == display.SELECTION || CameraPane.DEBUG_SELECTION;
407
+
408
+ //System.out.println("p = " + pv + "; q = " + qv + "; r = " + rv);
409
+ if (!selectmode) // display.drawMode != display.SELECTION) // && display.drawMode != display.SHADOW) // (attributes & FILL) != 0)
410
+ {
411
+ //gl.glBegin(gl.GL_TRIANGLES);
412
+ boolean hasnorm = pv.norm != null; // && (pv.norm.x != 0 || pv.norm.y != 0 || pv.norm.z != 0);
413
+ if (!hasnorm)
414
+ {
415
+ // System.out.println("FUCK!!");
416
+ LA.vecSub(pv/*.pos*/, qv/*.pos*/, obj.v0);
417
+ LA.vecSub(pv/*.pos*/, rv/*.pos*/, obj.v1);
418
+ LA.vecCross(obj.v0, obj.v1, obj.v2);
419
+ LA.vecNormalize(obj.v2);
420
+ gl.glNormal3f((float) obj.v2.x, (float) obj.v2.y, (float) obj.v2.z);
421
+ }
422
+
423
+ // P
424
+ float x = (float)pv.x;
425
+ float y = (float)pv.y;
426
+ float z = (float)pv.z;
427
+
428
+ if (hasnorm)
429
+ {
430
+// if (!pv.norm.normalized())
431
+// assert(pv.norm.normalized());
432
+
433
+ //System.out.println("normalp = " + pv.norm.x + ", " + pv.norm.y + ", " + pv.norm.z);
434
+ float nx = (float)pv.norm.x;
435
+ float ny = (float)pv.norm.y;
436
+ float nz = (float)pv.norm.z;
437
+
438
+ x += nx * obj.NORMALPUSH;
439
+ y += ny * obj.NORMALPUSH;
440
+ z += nz * obj.NORMALPUSH;
441
+
442
+ gl.glNormal3f(nx, ny, nz);
443
+ }
444
+ gl.glColor4f(pv.AO, pv.AO, pv.AO, 1);
445
+ SetColor(obj, pv);
446
+ //gl.glColor4f(r, g, b, 1);
447
+ //gl.glColor4f(pv.boundary, pv.boundary, pv.boundary, 1);
448
+ if (obj.flipV)
449
+ gl.glTexCoord2f((float) pv.s, 1-(float) pv.t);
450
+ else
451
+ gl.glTexCoord2f((float) pv.s, (float) pv.t);
452
+ //System.out.println("vertexp = " + pv.x + ", " + pv.y + ", " + pv.z);
453
+
454
+ gl.glVertex3f(x, y, z);
455
+
456
+ // Q
457
+ x = (float)qv.x;
458
+ y = (float)qv.y;
459
+ z = (float)qv.z;
460
+
461
+// Print(pv);
462
+ if (hasnorm)
463
+ {
464
+// assert(qv.norm.normalized());
465
+ //System.out.println("normalq = " + qv.norm.x + ", " + qv.norm.y + ", " + qv.norm.z);
466
+ float nx = (float)qv.norm.x;
467
+ float ny = (float)qv.norm.y;
468
+ float nz = (float)qv.norm.z;
469
+
470
+ x += nx * obj.NORMALPUSH;
471
+ y += ny * obj.NORMALPUSH;
472
+ z += nz * obj.NORMALPUSH;
473
+
474
+ gl.glNormal3f(nx, ny, nz);
475
+ }
476
+ //System.out.println("vertexq = " + qv.s + ", " + qv.t);
477
+ // boolean locked = false;
478
+ // float eps = 0.1f;
479
+ // boolean wrap = CameraPane.UVWRAP; // true; // UV WRAP TEXTURE ISSUE: true = artifacts, false = nice
480
+
481
+ // int dot = 0; //*/ (int)f.dot;
482
+
483
+ // if ((dot&1) == 0)
484
+ // dot |= (Math.abs(qv.s - pv.s) < eps && Math.abs(qv.t - pv.t) < eps) ? 3 : 1;
485
+
486
+ // if (wrap || (dot&2) != 0) // Math.abs(qv.s - pv.s) < eps && Math.abs(qv.t - pv.t) < eps)
487
+ if (obj.flipV)
488
+ gl.glTexCoord2f((float) qv.s, 1-(float) qv.t);
489
+ else
490
+ gl.glTexCoord2f((float) qv.s, (float) qv.t);
491
+ // else
492
+ // {
493
+ // locked = true;
494
+ // gl.glTexCoord2f((float) pv.s, (float) pv.t);
495
+ // }
496
+ gl.glColor4f(qv.AO, qv.AO, qv.AO, 1);
497
+ SetColor(obj, qv);
498
+
499
+ gl.glVertex3f(x, y, z);
500
+ //gl.glColor4f(r, g, b, 1);
501
+ //gl.glColor4f(qv.boundary, qv.boundary, qv.boundary, 1);
502
+ //System.out.println("vertexq = " + qv.x + ", " + qv.y + ", " + qv.z);
503
+// Print(qv);
504
+
505
+ // R
506
+ x = (float)rv.x;
507
+ y = (float)rv.y;
508
+ z = (float)rv.z;
509
+
510
+ if (hasnorm)
511
+ {
512
+// assert(rv.norm.normalized());
513
+ //System.out.println("normalr = " + rv.norm.x + ", " + rv.norm.y + ", " + rv.norm.z);
514
+ float nx = (float)rv.norm.x;
515
+ float ny = (float)rv.norm.y;
516
+ float nz = (float)rv.norm.z;
517
+
518
+ x += nx * obj.NORMALPUSH;
519
+ y += ny * obj.NORMALPUSH;
520
+ z += nz * obj.NORMALPUSH;
521
+
522
+ gl.glNormal3f(nx, ny, nz);
523
+ }
524
+
525
+ // if ((dot&4) == 0)
526
+ // dot |= (Math.abs(rv.s - pv.s) < eps && Math.abs(rv.t - pv.t) < eps) ? 12 : 4;
527
+
528
+ // if (wrap || !locked && (dot&8) != 0)
529
+ if (obj.flipV)
530
+ gl.glTexCoord2f((float) rv.s, 1-(float) rv.t);
531
+ else
532
+ gl.glTexCoord2f((float) rv.s, (float) rv.t);
533
+ // else
534
+ // gl.glTexCoord2f((float) pv.s, (float) pv.t);
535
+
536
+ // f.dot = dot;
537
+
538
+ gl.glColor4f(rv.AO, rv.AO, rv.AO, 1);
539
+ SetColor(obj, rv);
540
+ //gl.glColor4f(r, g, b, 1);
541
+ //gl.glColor4f(rv.boundary, rv.boundary, rv.boundary, 1);
542
+ //System.out.println("vertexr = " + rv.x + ", " + rv.y + ", " + rv.z);
543
+ gl.glVertex3f(x, y, z);
544
+// Print(rv);
545
+ //gl.glEnd();
546
+ }
547
+ else
548
+ {
549
+ gl.glVertex3f((float) pv.x, (float) pv.y, (float) pv.z);
550
+ gl.glVertex3f((float) qv.x, (float) qv.y, (float) qv.z);
551
+ gl.glVertex3f((float) rv.x, (float) rv.y, (float) rv.z);
552
+
553
+ }
554
+
555
+ if (false) // (attributes & WIREFRAME) != 0)
556
+ {
557
+ gl.glDisable(gl.GL_LIGHTING);
558
+
559
+ gl.glBegin(gl.GL_LINE_LOOP);
560
+ gl.glVertex3d(pv./*pos.*/x, pv./*pos.*/y, pv./*pos.*/z);
561
+ gl.glVertex3d(qv./*pos.*/x, qv./*pos.*/y, qv./*pos.*/z);
562
+ gl.glVertex3d(rv./*pos.*/x, rv./*pos.*/y, rv./*pos.*/z);
563
+ gl.glEnd();
564
+
565
+ gl.glEnable(gl.GL_LIGHTING);
566
+ }
567
+ }
568
+
569
+ /// INTERFACE
570
+
571
+ void SetColor(Object3D obj, Vertex p0)
572
+ {
573
+ CameraPane display = this;
574
+ BoundaryRep bRep = obj.bRep;
575
+
576
+ if (RENDERPROGRAM == 0)
577
+ {
578
+ float r = 0;
579
+ if (bRep != null)
580
+ {
581
+ if (bRep.stripified)
582
+ {
583
+ r = 1;
584
+ }
585
+ }
586
+ float g = 0;
587
+ if (bRep != null)
588
+ {
589
+ if (bRep.trimmed)
590
+ {
591
+ g = 1;
592
+ }
593
+ }
594
+ float b = 0;
595
+ if (obj.support != null && obj.link2master)
596
+ {
597
+ b = 1;
598
+ }
599
+ display.GetGL().glColor3f(r*p0.AO, g*p0.AO, b*p0.AO);
600
+ return;
601
+ }
602
+
603
+ if (display.DrawMode() != CameraPane.SHADOW)
604
+ return;
605
+
606
+ javax.media.opengl.GL gl = display.GetGL();
607
+// if (true) return;
608
+// float ao = p.AO;
609
+//
610
+// // if (ao == 0 && !bRep.AOdone) // transient problem!
611
+// // ao = 1;
612
+//
613
+// gl.glColor4f(ao, ao, ao, 1);
614
+
615
+// CameraPane.selectedpoint.
616
+// getAverage(cStatic.point1, true);
617
+ if (CameraPane.pointflow == null) // !random) // live)
618
+ {
619
+ return;
620
+ }
621
+
622
+ cStatic.point1.set(0,0,0);
623
+ LA.xformPos(cStatic.point1, CameraPane.selectedpoint.toParent, cStatic.point1);
624
+
625
+ cStatic.point1.sub(p0);
626
+
627
+
628
+// if (marked && (p0.vertexlinks == null || support == null || support.bRep == null)) // no position delta?
629
+// {
630
+// return;
631
+// }
632
+
633
+ //if (true)
634
+ if (cStatic.point1.dot(cStatic.point1) > 0.000001)
635
+ {
636
+ return;
637
+ }
638
+
639
+ float[] colorV = new float[3];
640
+
641
+ if (false) // marked)
642
+ {
643
+ // debug rigging weights
644
+ for (int object = 0; object < p0.vertexlinks.length; object++)
645
+ {
646
+ float weight = p0.weights[object] / p0.totalweight;
647
+
648
+ // if (weight < 0.1)
649
+ // {
650
+ // assert(weight == 0);
651
+ // continue;
652
+ // }
653
+
654
+ if (p0.vertexlinks[object] == -1)
655
+ continue;
656
+
657
+ Vertex q = obj.support.bRep.GetVertex(p0.vertexlinks[object]);
658
+
659
+ int color = //1 << object; //
660
+ //p.vertexlinks.length;
661
+ obj.support.bRep.supports[p0.closestsupport].links[object];
662
+ colorV[2] += (color & 1) * weight;
663
+ colorV[1] += ((color & 2) >> 1) * weight;
664
+ colorV[0] += ((color & 4) >> 2) * weight;
665
+ }
666
+ }
667
+ else
668
+ {
669
+ if (obj.drawingstarted)
670
+ {
671
+ // find next point
672
+ if (bRep.GetVertex(0).faceindices == null)
673
+ {
674
+ bRep.InitFaceIndices();
675
+ }
676
+
677
+ double ymin = p0.y;
678
+
679
+ Vertex newp = p0;
680
+
681
+ for (int fii = 0; fii < p0.faceindices.length; fii++)
682
+ {
683
+ int fi = p0.faceindices[fii];
684
+
685
+ if (fi == -1)
686
+ break;
687
+
688
+ Face f = bRep.GetFace(fi);
689
+
690
+ Vertex p = bRep.GetVertex(f.p);
691
+ Vertex q = bRep.GetVertex(f.q);
692
+ Vertex r = bRep.GetVertex(f.r);
693
+
694
+ int swap = (int)(Math.random()*3);
695
+
696
+// for (int s=swap; --s>=0;)
697
+// {
698
+// Vertex t = p;
699
+// p = q;
700
+// q = r;
701
+// r = t;
702
+// }
703
+ if (ymin > p.y)
704
+ {
705
+ ymin = p.y;
706
+ newp = p;
707
+// break;
708
+ }
709
+ if (ymin > q.y)
710
+ {
711
+ ymin = q.y;
712
+ newp = q;
713
+// break;
714
+ }
715
+ if (ymin > r.y)
716
+ {
717
+ ymin = r.y;
718
+ newp = r;
719
+// break;
720
+ }
721
+ }
722
+
723
+ CameraPane.selectedpoint.toParent[3][0] = newp.x;
724
+ CameraPane.selectedpoint.toParent[3][1] = newp.y;
725
+ CameraPane.selectedpoint.toParent[3][2] = newp.z;
726
+
727
+ obj.drawingstarted = false;
728
+
729
+ // return;
730
+ }
731
+
732
+ if (false) // CameraPane.DRAW
733
+ {
734
+ p0.AO = colorV[0] = 2;
735
+ colorV[1] = 2;
736
+ colorV[2] = 2;
737
+ }
738
+
739
+ CameraPane.pointflow.add(p0);
740
+ CameraPane.pointflow.Touch();
741
+ }
742
+
743
+// gl.glColor3f(colorV[0], colorV[1], colorV[2]);
744
+// gl.glMaterialfv(gl.GL_FRONT, gl.GL_DIFFUSE, colorV, 0);
745
+// gl.glMaterialfv(gl.GL_BACK, gl.GL_DIFFUSE, colorV, 0);
746
+ }
747
+
748
+ void DrawMaterial(cMaterial material, boolean selected)
749
+ {
750
+ CameraPane display = this;
751
+ //new Exception().printStackTrace();
752
+
753
+ if (display.IsFrozen() && !selected || display.IsAmbientOcclusionOn()) // || display.drawMode == display.SHADOW)
754
+ {
755
+ return;
756
+ }
757
+
758
+ javax.media.opengl.GL gl = display.GetGL();
759
+
760
+ //Color col = Color.getHSBColor(color,modulation,1);
761
+ //col.getColorComponents(ColorSpace.getInstance(ColorSpace.CS_LINEAR_RGB), CameraPane.modelParams0);
762
+ if (!material.multiply)
763
+ {
764
+ display.color = color;
765
+ display.saturation = material.modulation;
766
+ }
767
+ else
768
+ {
769
+ display.color *= color*2;
770
+ display.saturation *= material.modulation*2;
771
+ }
772
+
773
+ cColor.HSBtoRGB(display.color, display.saturation, 1, display.modelParams0);
774
+
775
+ float[] colorV = GrafreeD.colorV;
776
+
777
+ /**/
778
+ if (display.DrawMode() == display.DEFAULT) // && display.RENDERPROGRAM == 0)
779
+ {
780
+ colorV[0] = display.modelParams0[0] * material.diffuse;
781
+ colorV[1] = display.modelParams0[1] * material.diffuse;
782
+ colorV[2] = display.modelParams0[2] * material.diffuse;
783
+ colorV[3] = material.opacity;
784
+
785
+ gl.glColor4f(colorV[0], colorV[1], colorV[2], material.opacity);
786
+ //System.out.println("Opacity = " + opacity);
787
+
788
+ gl.glMaterialfv(gl.GL_FRONT, gl.GL_DIFFUSE, colorV, 0);
789
+ //color[0] /= 2; color[1] /= 2; color[2] /= 2;
790
+ gl.glMaterialfv(gl.GL_BACK, gl.GL_DIFFUSE, colorV, 0);
791
+
792
+ float amb = material.ambient;
793
+ if (amb < material.cameralight)
794
+ {
795
+ amb = material.cameralight;
796
+ }
797
+ colorV[0] = display.modelParams0[0] * material.diffuse * amb;
798
+ colorV[1] = display.modelParams0[1] * material.diffuse * amb;
799
+ colorV[2] = display.modelParams0[2] * material.diffuse * amb;
800
+ gl.glMaterialfv(gl.GL_FRONT, gl.GL_AMBIENT, colorV, 0);
801
+ //color[0] /= 2; color[1] /= 2; color[2] /= 2;
802
+ gl.glMaterialfv(gl.GL_BACK, gl.GL_AMBIENT, colorV, 0);
803
+
804
+ /**/
805
+ colorV[0] = ((1 - material.metalness) + display.modelParams0[0] * material.metalness) * material.specular;
806
+ colorV[1] = ((1 - material.metalness) + display.modelParams0[1] * material.metalness) * material.specular;
807
+ colorV[2] = ((1 - material.metalness) + display.modelParams0[2] * material.metalness) * material.specular;
808
+ gl.glMaterialfv(gl.GL_FRONT, gl.GL_SPECULAR, colorV, 0);
809
+ //color[0] /= 2; color[1] /= 2; color[2] /= 2;
810
+ gl.glMaterialfv(gl.GL_BACK, gl.GL_SPECULAR, colorV, 0);
811
+ colorV[0] = 10 / material.shininess; // 1/0.005f;
812
+ //System.out.println("shininess = " + colorV[0]);
813
+ if (colorV[0] > 128)
814
+ {
815
+ colorV[0] = 128;
816
+ }
817
+ gl.glMaterialfv(gl.GL_FRONT, gl.GL_SHININESS, colorV, 0);
818
+ gl.glMaterialfv(gl.GL_BACK, gl.GL_SHININESS, colorV, 0);
819
+ /**/
820
+ }
821
+ /**/
822
+
823
+ //selected = false;
824
+ selected = selected && display.flash;
825
+
826
+ //display.modelParams0[0] = 0; // pigment.r;
827
+ //display.modelParams0[1] = 0; // pigment.g;
828
+ //display.modelParams0[2] = 0; // pigment.b;
829
+ if (!material.multiply)
830
+ {
831
+ display.modelParams0[3] = material.metalness;
832
+ display.modelParams1[0] = material.diffuse;
833
+ display.modelParams1[1] = material.specular;
834
+ display.modelParams1[2] = 1 / material.shininess;
835
+ display.modelParams1[3] = material.shift;
836
+ display.modelParams2[0] = material.ambient;
837
+ display.modelParams2[1] = material.lightarea;
838
+ //System.out.println("light area = " + lightarea);
839
+ display.modelParams2[2] = 1 / material.factor; // diffuseness
840
+ display.modelParams2[3] = material.velvet;
841
+ display.modelParams3[0] = material.sheen;
842
+ display.modelParams3[1] = material.subsurface;
843
+ display.modelParams3[2] = material.bump; // backlit
844
+ display.modelParams3[3] = material.aniso;
845
+ display.modelParams4[0] = material.anisoV;
846
+ display.modelParams4[1] = selected ? 100 : material.cameralight;
847
+ //System.out.println("selected = " + selected);
848
+ display.modelParams4[2] = material.diffuseness;
849
+ display.modelParams4[3] = material.shadow;
850
+ display.modelParams5[0] = material.texture;
851
+ display.modelParams5[1] = material.opacity;
852
+ display.modelParams5[2] = material.fakedepth;
853
+ display.modelParams5[3] = CameraPane.SHADOWCULLFACE ? 0f : (material.shadowbias - 0.005f) / 10;
854
+ }
855
+ else
856
+ {
857
+ display.modelParams0[3] *= material.metalness*2;
858
+ display.modelParams1[0] *= material.diffuse*2;
859
+ display.modelParams1[1] *= material.specular*2;
860
+ display.modelParams1[2] *= material.shininess*2;
861
+ display.modelParams1[3] *= material.shift*2;
862
+ display.modelParams2[0] *= material.ambient*2;
863
+ display.modelParams2[1] *= material.lightarea*2;
864
+ display.modelParams2[2] *= material.factor*2;
865
+ display.modelParams2[3] *= material.velvet*2;
866
+ display.modelParams3[0] *= material.sheen*2;
867
+ display.modelParams3[1] *= material.subsurface*2;
868
+ display.modelParams3[2] *= material.bump*2;
869
+ display.modelParams3[3] *= material.aniso*2;
870
+ display.modelParams4[0] *= material.anisoV*2;
871
+ display.modelParams4[1] *= material.cameralight*2;
872
+ //System.out.println("selected = " + selected);
873
+ display.modelParams4[2] *= material.diffuseness*2;
874
+ display.modelParams4[3] *= material.shadow*2;
875
+ display.modelParams5[0] *= material.texture*2;
876
+ display.modelParams5[1] *= material.opacity*2;
877
+ display.modelParams5[2] *= material.fakedepth*2;
878
+ display.modelParams5[3] *= material.shadowbias*2;
879
+ }
880
+
881
+ display.modelParams6[0] = 0;
882
+ display.modelParams6[1] = 0;
883
+ display.modelParams6[2] = 0;
884
+ display.modelParams6[3] = 0;
885
+
886
+ display.modelParams7[0] = 0;
887
+ display.modelParams7[1] = 1000;
888
+ display.modelParams7[2] = 0;
889
+ display.modelParams7[3] = 0;
890
+
891
+ display.modelParams6[0] = 100; // criss de bug de bump
892
+
893
+ Object3D.cVector2[] extparams = display.vector2buffer;
894
+ if (extparams != null && extparams.length > 0 && extparams[0] != null)
895
+ {
896
+ display.modelParams6[0] = extparams[0].x / 1000.0f; // bump
897
+ display.modelParams6[1] = extparams[0].y / 1000.0f; // noise
898
+ if (extparams.length > 1)
899
+ {
900
+ display.modelParams6[2] = extparams[1].x / 1000.0f; // borderfade
901
+ display.modelParams6[3] = extparams[1].y / 1000.0f; // (float)Math.exp(-extparams[1].y / 1000.0f); // fog punchthrough
902
+ if (extparams.length > 2)
903
+ {
904
+ display.modelParams7[0] = extparams[2].x / 1000.0f; // noise power
905
+ float x = extparams[2].y / 1000.0f;
906
+ //if (x == 0)
907
+ // x = 1f;
908
+ display.modelParams7[1] = 1 / x / x / x / x / x / x / x / x / x / x / x / x / x; // (float)Math.pow(-Math.log((extparams[2].y+0.00) / 1000.0f), 1); // opacity power
909
+ if (extparams[2].y > 0)
910
+ {
911
+ //System.out.println("extparams[1].y = " + extparams[1].y);
912
+ //System.out.println("extparams[2].y = " + extparams[2].y);
913
+ //System.out.println("opacity power = " + display.modelParams7[1]);
914
+ }
915
+ }
916
+ }
917
+ }
918
+
919
+ //if (display.modelParams6[2] != 0)
920
+ /*
921
+ System.out.println("modelParams0[0] = " + display.modelParams0[0]);
922
+ System.out.println("modelParams0[1] = " + display.modelParams0[1]);
923
+ System.out.println("modelParams0[2] = " + display.modelParams0[2]);
924
+ System.out.println("modelParams0[3] = " + display.modelParams0[3]);
925
+ System.out.println("modelParams1[0] = " + display.modelParams1[0]);
926
+ System.out.println("modelParams1[1] = " + display.modelParams1[1]);
927
+ System.out.println("modelParams1[2] = " + display.modelParams1[2]);
928
+ System.out.println("modelParams1[3] = " + display.modelParams1[3]);
929
+ System.out.println("modelParams2[0] = " + display.modelParams2[0]);
930
+ System.out.println("modelParams2[1] = " + display.modelParams2[1]);
931
+ System.out.println("modelParams2[2] = " + display.modelParams2[2]);
932
+ System.out.println("modelParams2[3] = " + display.modelParams2[3]);
933
+ System.out.println("modelParams3[0] = " + display.modelParams3[0]);
934
+ System.out.println("modelParams3[1] = " + display.modelParams3[1]);
935
+ System.out.println("modelParams3[2] = " + display.modelParams3[2]);
936
+ System.out.println("modelParams3[3] = " + display.modelParams3[3]);
937
+ System.out.println("modelParams4[0] = " + display.modelParams4[0]);
938
+ System.out.println("modelParams4[1] = " + display.modelParams4[1]);
939
+ System.out.println("modelParams4[2] = " + display.modelParams4[2]);
940
+ System.out.println("modelParams4[3] = " + display.modelParams4[3]);
941
+ System.out.println("modelParams5[0] = " + display.modelParams5[0]);
942
+ System.out.println("modelParams5[1] = " + display.modelParams5[1]);
943
+ System.out.println("modelParams5[2] = " + display.modelParams5[2]);
944
+ System.out.println("modelParams5[3] = " + display.modelParams5[3]);
945
+ System.out.println("modelParams6[0] = " + display.modelParams6[0]);
946
+ System.out.println("modelParams6[1] = " + display.modelParams6[1]);
947
+ System.out.println("modelParams6[2] = " + display.modelParams6[2]);
948
+ System.out.println("modelParams6[3] = " + display.modelParams6[3]);
949
+ System.out.println("modelParams7[0] = " + display.modelParams7[0]);
950
+ System.out.println("modelParams7[1] = " + display.modelParams7[1]);
951
+ System.out.println("modelParams7[2] = " + display.modelParams7[2]);
952
+ System.out.println("modelParams7[3] = " + display.modelParams7[3]);
953
+ /**/
954
+ //assert (display.modelParams6[2] == 0);
955
+
956
+ //System.out.println("noise power = " + display.modelParams7[0]);
957
+ //System.out.println("shadowbias = " + shadowbias);
958
+
959
+ gl.glProgramEnvParameter4fvARB(gl.GL_FRAGMENT_PROGRAM_ARB, 0, display.modelParams0, 0);
960
+ gl.glProgramEnvParameter4fvARB(gl.GL_FRAGMENT_PROGRAM_ARB, 1, display.modelParams1, 0);
961
+ gl.glProgramEnvParameter4fvARB(gl.GL_FRAGMENT_PROGRAM_ARB, 2, display.modelParams2, 0);
962
+ gl.glProgramEnvParameter4fvARB(gl.GL_FRAGMENT_PROGRAM_ARB, 3, display.modelParams3, 0);
963
+ gl.glProgramEnvParameter4fvARB(gl.GL_FRAGMENT_PROGRAM_ARB, 4, display.modelParams4, 0);
964
+ gl.glProgramEnvParameter4fvARB(gl.GL_FRAGMENT_PROGRAM_ARB, 5, display.modelParams5, 0);
965
+ gl.glProgramEnvParameter4fvARB(gl.GL_FRAGMENT_PROGRAM_ARB, 6, display.modelParams6, 0);
966
+ gl.glProgramEnvParameter4fvARB(gl.GL_FRAGMENT_PROGRAM_ARB, 7, display.modelParams7, 0);
967
+
968
+ int mode = display.FP_SHADER;
969
+
970
+ if (material.aniso != material.anisoV || material.aniso > 0.002)
971
+ {
972
+ mode |= display.FP_ANISO;
973
+ }
974
+
975
+ display.EnableProgram(mode);
976
+
977
+ //System.out.println("opacity power = " + display.modelParams7[1]);
978
+
979
+ if (!material.multiply)
980
+ {
981
+ if (Globals.drawMode == CameraPane.SHADOW)
982
+ gl.glDepthMask(material.opacity >= 0.9 && display.modelParams7[1] > 0.1);
983
+ else
984
+ gl.glDepthMask(material.opacity >= 0.99);
985
+ }
208986 }
209987
210988 int matrixdepth = 0; // 10000; // CONFLICT WITH cMESH... WARNING WARNING WARNING WARNING WARNING WARNING !!!!!!!!!!!! 0;
....@@ -225,7 +1003,7 @@
2251003 currentGL.glMultMatrixd(model, 0);
2261004 }
2271005
228
- void PushMatrix(double[][] matrix, int count)
1006
+ public void PushMatrix(double[][] matrix, int count) // INTERFACE
2291007 {
2301008 matrixdepth++;
2311009 // GrafreeD.tracein(matrix);
....@@ -270,7 +1048,7 @@
2701048
2711049 double[][] tmpmat = new double[4][4];
2721050
273
- void PopMatrix(double[][] inverse)
1051
+ public void PopMatrix(double[][] inverse) // INTERFACE
2741052 {
2751053 --matrixdepth;
2761054
....@@ -310,7 +1088,7 @@
3101088 PushTextureMatrix(matrix, 1);
3111089 }
3121090
313
- void PushTextureMatrix(double[][] matrix, int count)
1091
+ public void PushTextureMatrix(double[][] matrix, int count) // INTERFACE
3141092 {
3151093 currentGL.glActiveTexture(GetGL().GL_TEXTURE0);
3161094
....@@ -324,7 +1102,7 @@
3241102 currentGL.glMatrixMode(GetGL().GL_MODELVIEW);
3251103 }
3261104
327
- void PopTextureMatrix(double[][] inverse)
1105
+ public void PopTextureMatrix(double[][] inverse) // INTERFACE
3281106 {
3291107 currentGL.glActiveTexture(GetGL().GL_TEXTURE0);
3301108 currentGL.glMatrixMode(GetGL().GL_TEXTURE);
....@@ -356,10 +1134,10 @@
3561134 // may 2014 if (cam == cameras[0] || cam == cameras[1])
3571135 // return false;
3581136
359
- if (REFUSEMODE && isLIVE() && camerachangeframe != 0 && camerachangeframe != framecount)
1137
+ if (REFUSEMODE && Globals.isLIVE() && camerachangeframe != 0 && camerachangeframe != Globals.framecount)
3601138 {
3611139 // check for last change
362
- if (framecount < camerachangeframe + 400) // 120 == 1 second
1140
+ if (Globals.framecount < camerachangeframe + 400) // 120 == 1 second
3631141 {
3641142 // refuse the camera change
3651143 System.err.println("Camera " + cam + " REFUSED");
....@@ -367,7 +1145,7 @@
3671145 }
3681146 }
3691147
370
- camerachangeframe = framecount;
1148
+ camerachangeframe = Globals.framecount;
3711149
3721150 cam.hAspect = -1; // Read only
3731151
....@@ -398,7 +1176,7 @@
3981176 {
3991177 //System.err.println("Oeil on");
4001178 TRACK = true;
401
-// JUNE 2014 if (TRACK && trackedobject != null && drawMode == SHADOW) // && !lightMode)
1179
+// JUNE 2014 if (TRACK && trackedobject != null && DrawMode() == SHADOW) // && !lightMode)
4021180 // object.editWindow.ScreenFit(trackedobject);
4031181 //pingthread.StepToTarget(true);
4041182 }
....@@ -407,7 +1185,7 @@
4071185 {
4081186 //System.err.println("Oeil on");
4091187 OEIL = true;
410
- if ((TRACK || SHADOWTRACK) && trackedobject != null && drawMode == SHADOW) // && !lightMode)
1188
+ if ((TRACK || SHADOWTRACK) && trackedobject != null && DrawMode() == SHADOW) // && !lightMode)
4111189 object.editWindow.ScreenFit(trackedobject, SHADOWTRACK && !TRACK);
4121190 //pingthread.StepToTarget(true);
4131191 }
....@@ -471,7 +1249,7 @@
4711249 {
4721250 frozen ^= true;
4731251 // Weird...
474
- lighttouched = true;
1252
+ Globals.lighttouched = true;
4751253 }
4761254
4771255 void ToggleDL()
....@@ -486,11 +1264,11 @@
4861264
4871265 void ToggleLive()
4881266 {
489
- setLIVE(isLIVE() ^ true);
1267
+ Globals.setLIVE(Globals.isLIVE() ^ true);
4901268
491
- System.err.println("LIVE = " + isLIVE());
1269
+ System.err.println("LIVE = " + Globals.isLIVE());
4921270
493
- if (!isLIVE()) // save sound
1271
+ if (!Globals.isLIVE()) // save sound
4941272 GrafreeD.savesound = true; // wav.save();
4951273 // else
4961274 repaint(); // start loop // may 2013
....@@ -513,7 +1291,7 @@
5131291
5141292 void ToggleCrowd()
5151293 {
516
- CROWD ^= true;
1294
+ Globals.CROWD ^= true;
5171295 }
5181296
5191297 void ToggleInertia()
....@@ -674,34 +1452,6 @@
6741452 lightCamera = cam;
6751453 }
6761454
677
- CameraPane(Object3D o, Camera cam, boolean withcontext)
678
- {
679
- super(defaultcaps, null, withcontext?glcontext:null, null);
680
-
681
- //System.out.println("AMERICA AREA = " + (9458886 + 9210755 + 8480395 + 2736391 + 1943018 + 1289475 + 1141569 + 1069350 + 911559 + 721229 + 395886 + 377972 + 246700 + 211156 + 173985 + 141133 + 118279 + 112079 + 108523));
682
- glcontext = getContext();
683
-
684
- cameras = new Camera[2];
685
- targetLookAts = new cVector[2];
686
-
687
- SetCamera(cam);
688
-
689
- SetLight(new Camera(new cVector(10, 10, -20)));
690
-
691
- object = o;
692
-
693
- setBackground(Color.white);
694
-
695
- addKeyListener(this);
696
- addMouseListener(this);
697
- addMouseMotionListener(this);
698
- addMouseWheelListener(this);
699
- //System.out.println("addGLEventListener: " + this);
700
- addGLEventListener(this);
701
-
702
-// pingthread.start(); // may 2013
703
- }
704
-
7051455 private static void ApplyTransform(GL gl, Mat4f xform)
7061456 {
7071457 float[] data = new float[16];
....@@ -759,7 +1509,7 @@
7591509
7601510 GL currentGL;
7611511
762
- GL GetGL()
1512
+ public GL GetGL() // INTERFACE
7631513 {
7641514 return currentGL;
7651515 }
....@@ -6271,7 +7021,7 @@
62717021 return null;
62727022 }
62737023
6274
- void ReleaseTextures(cTexture tex)
7024
+ public void ReleaseTextures(cTexture tex) // INTERFACE
62757025 {
62767026 if (/*tex == null ||*/ ambientOcclusion ) // || !textureon)
62777027 {
....@@ -6309,7 +7059,7 @@
63097059
63107060 void ReleaseTexture(String tex, boolean bump)
63117061 {
6312
- if (// drawMode != 0 || /*tex == null ||*/
7062
+ if (// DrawMode() != 0 || /*tex == null ||*/
63137063 ambientOcclusion ) // || !textureon)
63147064 {
63157065 return;
....@@ -6410,9 +7160,9 @@
64107160 }
64117161 }
64127162
6413
- /*boolean*/ void BindTextures(cTexture tex, int resolution)
7163
+ /*boolean*/ public void BindTextures(cTexture tex, int resolution) // INTERFACE
64147164 {
6415
- if (// drawMode != 0 || /*tex == null ||*/
7165
+ if (// DrawMode() != 0 || /*tex == null ||*/
64167166 ambientOcclusion ) // || !textureon)
64177167 {
64187168 return; // false;
....@@ -7312,9 +8062,9 @@
73128062 static boolean occlusionInitialized = false;
73138063 boolean selection = false;
73148064 boolean pointselection = false;
7315
- /*static*/ boolean lighttouched = true;
8065
+ ///*static*/ boolean lighttouched = true;
73168066 boolean deselect;
7317
- boolean ambientOcclusion = false;
8067
+ private boolean ambientOcclusion = false;
73188068 static boolean flash = false;
73198069 /*static*/ boolean wait = false;
73208070 boolean displaydone = false; // after repaint() calls
....@@ -7444,6 +8194,8 @@
74448194 //gl.glFrustum(-0.5*scale, 0.5*scale, -0.5*scale, 0.5*scale, 1, 100);
74458195 //glu.gluPerspective(lightshaper_fovy, 1, lightshaper_zNear, lightshaper_zFar);
74468196 double scale = lightCamera.SCALE / lightCamera.Distance();
8197
+// PATCH FILLE AUX JEANS
8198
+ //scale *= lightCamera.shaper_fovy / 25;
74478199 gl.glScaled(2 * scale, 2 * scale, -scale);
74488200 gl.glTranslated(0, 0, lightCamera.DECAL);
74498201
....@@ -7601,8 +8353,6 @@
76018353
76028354 boolean restartframe = false;
76038355
7604
- static int framecount = 0; // general-purpose global count
7605
-
76068356 void displayAntiAliased(javax.media.opengl.GL gl)
76078357 {
76088358 //gl.glGetIntegerv(gl.GL_ACCUM_RED_BITS, viewport, 0);
....@@ -7633,7 +8383,7 @@
76338383 gl.glClear(gl.GL_ACCUM_BUFFER_BIT);
76348384 for (jitter = 0; jitter < ACSIZE; jitter++) //, GrafreeD.wav.cursor += LIVE ? 735 : 0)
76358385 {
7636
- framecount++;
8386
+ Globals.framecount++;
76378387
76388388 if (CameraPane.tickcount > 0)
76398389 CameraPane.tickcount--;
....@@ -7671,7 +8421,7 @@
76718421
76728422 gl.glLightfv(gl.GL_LIGHT0, gl.GL_POSITION, pos, 0);
76738423 */
7674
- lighttouched = true;
8424
+ Globals.lighttouched = true;
76758425 //System.err.println(" shadowbuffer: " + jitter);
76768426 shadowbuffer.display();
76778427
....@@ -8618,13 +9368,6 @@
86189368 }
86199369 }
86209370
8621
- boolean IsFrozen()
8622
- {
8623
- boolean selectmode = drawMode == SELECTION || CameraPane.DEBUG_SELECTION;
8624
-
8625
- return !selectmode && cameracount == 0; // != 0;
8626
- }
8627
-
86289371 boolean niceon = false;
86299372 javax.swing.Timer AAtimer = new javax.swing.Timer(750, this);
86309373 boolean currentlydrawing = false;
....@@ -8642,8 +9385,8 @@
86429385 }
86439386 // if (DEBUG_SELECTION)
86449387 // {
8645
-// if (drawMode != SELECTION)
8646
-// drawMode = SELECTION;
9388
+// if (DrawMode() != SELECTION)
9389
+// DrawMode() = SELECTION;
86479390 // }
86489391
86499392 if (!isRenderer)
....@@ -8699,9 +9442,9 @@
86999442
87009443 //ANTIALIAS = 0;
87019444
8702
- if (drawMode == DEFAULT) // && CURRENTANTIALIAS > 0)
9445
+ if (DrawMode() == DEFAULT) // && CURRENTANTIALIAS > 0)
87039446 {
8704
- if (niceon || isLIVE())
9447
+ if (niceon || Globals.isLIVE())
87059448 {
87069449 //if(active == 0)
87079450 // antialiaser = null;
....@@ -8726,7 +9469,7 @@
87269469 assert eyeCamera.shaper_zFar == 1E5f; // 500.0f;
87279470 */
87289471
8729
- if (drawMode == DEFAULT)
9472
+ if (DrawMode() == DEFAULT)
87309473 {
87319474 currentlydrawing = true;
87329475 }
....@@ -8757,12 +9500,12 @@
87579500
87589501 // if(Applet3D.clipboard != null)
87599502 // System.out.println("Clipboard = " + Applet3D.clipboard); //.get(0).parent);
8760
-//drawMode = SELECTION;
9503
+//DrawMode() = SELECTION;
87619504 indexcount = 0;
87629505
8763
- if (drawMode == OCCLUSION)
9506
+ if (DrawMode() == OCCLUSION)
87649507 {
8765
- drawMode = DEFAULT;
9508
+ Globals.drawMode = DEFAULT; // WARNING
87669509 ambientOcclusion = true;
87679510 setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
87689511 Object3D theobject = object;
....@@ -8781,19 +9524,19 @@
87819524 ambientOcclusion = false;
87829525 }
87839526
8784
- if (lighttouched && drawMode == DEFAULT && !lightMode) // && !FROZEN)
9527
+ if (Globals.lighttouched && DrawMode() == DEFAULT && !lightMode) // && !FROZEN)
87859528 {
87869529 //if (RENDERSHADOW) // ?
87879530 if (!IsFrozen())
87889531 {
87899532 // dec 2012
8790
- if (!ambientOcclusion && !(!flash && !lightMode && drawMode == DEFAULT && ANTIALIAS > 0))
9533
+ if (!ambientOcclusion && !(!flash && !lightMode && DrawMode() == DEFAULT && ANTIALIAS > 0))
87919534 {
8792
- framecount++;
9535
+ Globals.framecount++;
87939536 shadowbuffer.display();
87949537 }
87959538 }
8796
- lighttouched = false; // ??
9539
+ Globals.lighttouched = false; // ??
87979540 //drawing = true;
87989541 //lighttouched = true;
87999542 }
....@@ -8814,9 +9557,9 @@
88149557 //eyeCamera.shaper_fovy = 1;
88159558 }
88169559
8817
- if ((RENDERPROGRAM != 0 || ambientOcclusion || spherical) && drawMode == DEFAULT) // SELECTION)
9560
+ if ((RENDERPROGRAM != 0 || ambientOcclusion || spherical) && DrawMode() == DEFAULT) // SELECTION)
88189561 {
8819
- //System.out.println("drawMode = " + drawMode);
9562
+ //System.out.println("DrawMode() = " + DrawMode());
88209563 vertexMode |= VP_PASS;
88219564 //vertexMode |= VP_PROJECTION;
88229565 if (!ambientOcclusion)
....@@ -8876,7 +9619,7 @@
88769619 Camera cam = renderCamera; // lightMode?lightCamera:eyeCamera;
88779620 //Camera lightcam = new Camera(light0);
88789621
8879
- if (drawMode == SHADOW)
9622
+ if (DrawMode() == SHADOW)
88809623 {
88819624 /*
88829625 gl.glMatrixMode(GL.GL_MODELVIEW);
....@@ -8966,7 +9709,7 @@
89669709 gl.glClear(gl.GL_DEPTH_BUFFER_BIT);
89679710 } else
89689711 {
8969
- if (drawMode != DEFAULT)
9712
+ if (DrawMode() != DEFAULT)
89709713 {
89719714 gl.glClearColor(1, 1, 1, 0);
89729715 } // 1);
....@@ -9031,7 +9774,7 @@
90319774
90329775 fast &= !ambientOcclusion;
90339776
9034
- if (drawMode == DEFAULT)
9777
+ if (DrawMode() == DEFAULT)
90359778 {
90369779 //gl.glEnable(gl.GL_ALPHA_TEST);
90379780 //gl.glActiveTexture(GL.GL_TEXTURE0);
....@@ -9092,6 +9835,8 @@
90929835 //gl.glFrustum(-0.5*scale, 0.5*scale, -0.5*scale, 0.5*scale, 1, 100);
90939836 //glu.gluPerspective(lightshaper_fovy, 1, lightshaper_zNear, lightshaper_zFar);
90949837 double scale = lightCamera.SCALE / lightCamera.Distance();
9838
+// PATCH FILLE AUX JEANS
9839
+ //scale *= lightCamera.shaper_fovy / 25;
90959840 gl.glScaled(2 * scale, 2 * scale, -scale);
90969841 gl.glTranslated(0, 0, lightCamera.DECAL);
90979842
....@@ -9227,10 +9972,12 @@
92279972 gl.glMatrixMode(gl.GL_PROJECTION);
92289973 gl.glLoadIdentity();
92299974
9230
- if (drawMode == SHADOW || cam == lightCamera) // || (vertexMode&VP_PROJECTION) != 0)
9975
+ if (DrawMode() == SHADOW || cam == lightCamera) // || (vertexMode&VP_PROJECTION) != 0)
92319976 {
92329977 //glu.gluPerspective(lightshaper_fovy, 1, lightshaper_zNear, lightshaper_zFar);
92339978 double scale = lightCamera.SCALE / lightCamera.Distance();
9979
+// PATCH FILLE AUX JEANS
9980
+ //scale *= lightCamera.shaper_fovy / 25;
92349981 gl.glScaled(2 * scale, 2 * scale, -scale);
92359982 gl.glTranslated(0, 0, lightCamera.DECAL);
92369983 //System.out.println("DECAL = " + LIGHTDECAL + "; SCALE = " + LIGHTSCALE);
....@@ -9283,7 +10030,7 @@
928310030 //gl.glPushMatrix();
928410031 gl.glLoadIdentity();
928510032
9286
- if (!ambientOcclusion) // drawMode != OCCLUSION)
10033
+ if (!ambientOcclusion) // DrawMode() != OCCLUSION)
928710034 {
928810035 //LA.xformPos(light0, lightCamera.fromScreen, light);
928910036 LA.xformDir(dirlight, lightCamera.fromScreen, lightposition);
....@@ -9370,7 +10117,7 @@
937010117 }
937110118
937210119 /**/
9373
- if (true) // drawMode == SELECTION) // != DEFAULT)
10120
+ if (true) // DrawMode() == SELECTION) // != DEFAULT)
937410121 gl.glDisable(gl.GL_LIGHTING);
937510122 else
937610123 gl.glEnable(gl.GL_LIGHTING);
....@@ -9388,7 +10135,7 @@
938810135
938910136 lightslot = 64;
939010137
9391
- if (!frozen && !ambientOcclusion && isRenderer && drawMode == DEFAULT)
10138
+ if (!frozen && !ambientOcclusion && isRenderer && DrawMode() == DEFAULT)
939210139 {
939310140 DrawLights(object);
939410141 }
....@@ -9399,7 +10146,7 @@
939910146 fragmentMode |= (lightslot - 64) << 2; // 1; // first bit is available for aniso
940010147 //System.out.println("fragmentMode = " + fragmentMode);
940110148
9402
- if (drawMode == DEFAULT || drawMode == SELECTION || DEBUG_SELECTION)
10149
+ if (DrawMode() == DEFAULT || DrawMode() == SELECTION || DEBUG_SELECTION)
940310150 {
940410151 /*
940510152 if (CULLFACE || (ambientOcclusion && OCCLUSION_CULLING))
....@@ -9432,7 +10179,7 @@
943210179 }
943310180 }
943410181
9435
- if (drawMode == DEFAULT)
10182
+ if (DrawMode() == DEFAULT)
943610183 {
943710184 if (WIREFRAME && !ambientOcclusion)
943810185 {
....@@ -9450,7 +10197,7 @@
945010197 gl.glDisable(GL.GL_FRAGMENT_PROGRAM_ARB);
945110198 gl.glDisable(GL.GL_VERTEX_PROGRAM_ARB);
945210199
9453
- if (!fast/*RENDERPROGRAM != 0*/ && (drawMode == DEFAULT || drawMode == SHADOW)) // && !WIREFRAME) //
10200
+ if (!fast/*RENDERPROGRAM != 0*/ && (DrawMode() == DEFAULT || DrawMode() == SHADOW)) // && !WIREFRAME) //
945410201 {
945510202 if (vertexMode != 0) // && !fast)
945610203 {
....@@ -9470,7 +10217,7 @@
947010217 }
947110218 }
947210219
9473
- if (false) // fast && !IsFreezed() && drawMode != SELECTION && !ambientOcclusion)
10220
+ if (false) // fast && !IsFreezed() && DrawMode() != SELECTION && !ambientOcclusion)
947410221 {
947510222 //gl.glDepthFunc(GL.GL_LEQUAL);
947610223 //gl.glClear(gl.GL_COLOR_BUFFER_BIT | gl.GL_DEPTH_BUFFER_BIT);
....@@ -9498,7 +10245,7 @@
949810245 //gl.glDepthMask(false);
949910246 }
950010247
9501
- if (false) // drawMode == SHADOW)
10248
+ if (false) // DrawMode() == SHADOW)
950210249 {
950310250 //SetColumnMajorData(cameraInverseTransform, view_1);
950410251 //System.out.println("light = " + cameraInverseTransform);
....@@ -9512,16 +10259,16 @@
951210259 //System.out.println("object = " + object);
951310260 if (!frozen && !imageLocked)
951410261 {
9515
- if (!flash && !lightMode && drawMode == DEFAULT && ANTIALIAS > 0)
10262
+ if (!flash && !lightMode && DrawMode() == DEFAULT && ANTIALIAS > 0)
951610263 {
951710264 displayAntiAliased(gl);
951810265 } else
951910266 {
952010267 programcount = 0;
9521
- int keepmode = drawMode;
10268
+ int keepmode = DrawMode();
952210269 // if (DEBUG_SELECTION)
952310270 // {
9524
-// drawMode = SELECTION;
10271
+// DrawMode() = SELECTION;
952510272 // }
952610273 // for point selection
952710274 // gl.glGetDoublev(gl.GL_MODELVIEW_MATRIX, tempmat, 0);
....@@ -9531,10 +10278,10 @@
953110278 DrawObject(gl);
953210279
953310280 // jan 2013 System.err.println("RESET ABORT (display)");
9534
- // if (drawMode == DEFAULT)
10281
+ // if (DrawMode() == DEFAULT)
953510282 // ABORTED = false;
953610283 fullreset = false;
9537
- drawMode = keepmode;
10284
+ Globals.drawMode = keepmode; // WARNING
953810285 //System.out.println("PROGRAM SWITCH " + programcount);
953910286 }
954010287 }
....@@ -9542,11 +10289,11 @@
954210289 gl.glDisable(GL.GL_VERTEX_PROGRAM_ARB);
954310290 gl.glDisable(GL.GL_FRAGMENT_PROGRAM_ARB);
954410291
9545
- if (drawMode == DEFAULT)
10292
+ if (DrawMode() == DEFAULT)
954610293 {
954710294 ReleaseTexture(NOISE_TEXTURE, false);
954810295 }
9549
- //if (drawMode == DEFAULT)
10296
+ //if (DrawMode() == DEFAULT)
955010297 {
955110298
955210299 gl.glActiveTexture(GL.GL_TEXTURE1);
....@@ -9558,7 +10305,7 @@
955810305 //else
955910306 //gl.glDisable(gl.GL_TEXTURE_2D);
956010307 //gl.glPopMatrix();
9561
- if (imageCompleted && ANTIALIAS > 0 && drawMode == DEFAULT && cam != lightCamera && !ambientOcclusion)
10308
+ if (imageCompleted && ANTIALIAS > 0 && DrawMode() == DEFAULT && cam != lightCamera && !ambientOcclusion)
956210309 {
956310310 //new Exception().printStackTrace();
956410311 //System.out.println("Draw image " + width + ", " + height);
....@@ -9600,7 +10347,7 @@
960010347 //gl.glFlush();
960110348 }
960210349
9603
- if (flash && drawMode == DEFAULT)
10350
+ if (flash && DrawMode() == DEFAULT)
960410351 {
960510352 flash = false;
960610353 wait = true;
....@@ -9608,9 +10355,9 @@
960810355 }
960910356
961010357 //drawing = false;
9611
- //if(drawMode == DEFAULT)
10358
+ //if(DrawMode() == DEFAULT)
961210359 // niceon = false;
9613
- if (drawMode == DEFAULT)
10360
+ if (DrawMode() == DEFAULT)
961410361 {
961510362 currentlydrawing = false;
961610363 }
....@@ -9630,7 +10377,7 @@
963010377 repaint();
963110378 }
963210379
9633
- if (isLIVE() && drawMode == DEFAULT) // may 2013
10380
+ if (Globals.isLIVE() && DrawMode() == DEFAULT) // may 2013
963410381 repaint();
963510382
963610383 displaydone = true;
....@@ -9667,7 +10414,7 @@
966710414 if (GrafreeD.RENDERME > 0)
966810415 GrafreeD.RENDERME--; // mechante magouille
966910416
9670
- ONESTEP = false;
10417
+ Globals.ONESTEP = false;
967110418 }
967210419
967310420 static boolean zoomonce = false;
....@@ -9675,11 +10422,11 @@
967510422 void DrawObject(GL gl, boolean draw)
967610423 {
967710424 //System.out.println("DRAW OBJECT " + mouseDown);
9678
-// drawMode = SELECTION;
10425
+// DrawMode() = SELECTION;
967910426 //GL gl = getGL();
968010427 if ((TRACK || SHADOWTRACK) || zoomonce)
968110428 {
9682
- if ((TRACK || SHADOWTRACK) && trackedobject != null && drawMode == SHADOW) // && !lightMode)
10429
+ if ((TRACK || SHADOWTRACK) && trackedobject != null && DrawMode() == SHADOW) // && !lightMode)
968310430 object.editWindow.ScreenFit(trackedobject, SHADOWTRACK && !TRACK);
968410431 pingthread.StepToTarget(true); // true);
968510432 // zoomonce = false;
....@@ -9700,9 +10447,9 @@
970010447 callist = gl.glGenLists(1);
970110448 }
970210449
9703
- boolean selectmode = drawMode == SELECTION || CameraPane.DEBUG_SELECTION;
10450
+ boolean selectmode = DrawMode() == SELECTION || CameraPane.DEBUG_SELECTION;
970410451
9705
- boolean active = !selectmode; // drawMode != SELECTION; // mouseDown;
10452
+ boolean active = !selectmode; // DrawMode() != SELECTION; // mouseDown;
970610453
970710454 if (!mainDL || !active || touched)
970810455 {
....@@ -9729,7 +10476,7 @@
972910476 PushMatrix(ClickInfo.matbuffer);
973010477 }
973110478
9732
- if (drawMode == 0)
10479
+ if (DrawMode() == 0)
973310480 {
973410481 // System.out.println("CLEAR +++++++++++++++ +++++++++++++++ +++++++++++++++ +++++++++++++++");
973510482
....@@ -9743,7 +10490,7 @@
974310490 // DRAW
974410491 object.draw(this, /*(Composite)*/ object, false, false);
974510492
9746
- if (drawMode == DEFAULT)
10493
+ if (DrawMode() == DEFAULT)
974710494 {
974810495 if (DEBUG)
974910496 {
....@@ -9754,40 +10501,40 @@
975410501 selectedpoint.radius = radius;
975510502 selectedpoint.recalculate();
975610503 selectedpoint.material = new cMaterial();
9757
- selectedpoint.material.color = 0.15f;
10504
+ selectedpoint.material.color = 0.15f; // Yellow
975810505 selectedpoint.material.modulation = 0.75f;
975910506
9760
- debugpoint.radius = radius;
9761
- debugpoint.recalculate();
9762
- debugpoint.material = new cMaterial();
9763
- debugpoint.material.color = 0.25f;
9764
- debugpoint.material.modulation = 0.75f;
10507
+ debugpointG.radius = radius;
10508
+ debugpointG.recalculate();
10509
+ debugpointG.material = new cMaterial();
10510
+ debugpointG.material.color = 0.25f; // Green
10511
+ debugpointG.material.modulation = 0.75f;
976510512
9766
- debugpoint2.radius = radius;
9767
- debugpoint2.recalculate();
9768
- debugpoint2.material = new cMaterial();
9769
- debugpoint2.material.color = 0.75f;
9770
- debugpoint2.material.modulation = 0.75f;
10513
+ debugpointP.radius = radius;
10514
+ debugpointP.recalculate();
10515
+ debugpointP.material = new cMaterial();
10516
+ debugpointP.material.color = 0.75f; // Purple
10517
+ debugpointP.material.modulation = 0.75f;
977110518
9772
- debugpoint3.radius = radius;
9773
- debugpoint3.recalculate();
9774
- debugpoint3.material = new cMaterial();
9775
- debugpoint3.material.color = 0.5f;
9776
- debugpoint3.material.modulation = 0.75f;
10519
+ debugpointC.radius = radius;
10520
+ debugpointC.recalculate();
10521
+ debugpointC.material = new cMaterial();
10522
+ debugpointC.material.color = 0.5f; // Cyan
10523
+ debugpointC.material.modulation = 0.75f;
977710524
9778
- debugpoint4.radius = radius;
9779
- debugpoint4.recalculate();
9780
- debugpoint4.material = new cMaterial();
9781
- debugpoint4.material.color = 0f;
9782
- debugpoint4.material.modulation = 0.75f;
10525
+ debugpointR.radius = radius;
10526
+ debugpointR.recalculate();
10527
+ debugpointR.material = new cMaterial();
10528
+ debugpointR.material.color = 0f; // Red
10529
+ debugpointR.material.modulation = 0.75f;
978310530
978410531 InitPoints(radius);
978510532 }
978610533 selectedpoint.draw(this, /*(Composite)*/ null, false, false);
9787
- debugpoint.draw(this, /*(Composite)*/ null, false,false);
9788
- debugpoint2.draw(this, /*(Composite)*/ null, false,false);
9789
- debugpoint3.draw(this, /*(Composite)*/ null, false,false);
9790
- debugpoint4.draw(this, /*(Composite)*/ null, false,false);
10534
+ debugpointG.draw(this, /*(Composite)*/ null, false,false);
10535
+ debugpointP.draw(this, /*(Composite)*/ null, false,false);
10536
+ debugpointC.draw(this, /*(Composite)*/ null, false,false);
10537
+ debugpointR.draw(this, /*(Composite)*/ null, false,false);
979110538 // DrawPoints(this);
979210539 }
979310540
....@@ -9795,7 +10542,7 @@
979510542 }
979610543 // GrafreeD.traceoff();
979710544 //System.out.println(stackdepth);
9798
- if (drawMode == 0)
10545
+ if (DrawMode() == 0)
979910546 {
980010547 ReleaseTextures(DEFAULT_TEXTURES);
980110548
....@@ -9820,17 +10567,19 @@
982010567
982110568 checker = null;
982210569
9823
- if (!ambientOcclusion && !IsFrozen() && drawMode == DEFAULT)
10570
+ if (!ambientOcclusion && !IsFrozen() && DrawMode() == DEFAULT)
982410571 FindChecker(object);
982510572
9826
- if (checker != null && drawMode == DEFAULT)
10573
+ if (checker != null && DrawMode() == DEFAULT)
982710574 {
9828
- // BindTexture(IMMORTAL_TEXTURE);
10575
+ //BindTexture(IMMORTAL_TEXTURE);
10576
+ BindTextures(checker.GetTextures(), checker.texres);
982910577 // NEAREST
983010578 GetGL().glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MAG_FILTER, GL.GL_NEAREST); // GL.GL_LINEAR);
983110579 DrawChecker(gl);
983210580 //checker.Draw(this, null, false);
983310581 // ReleaseTexture(IMMORTAL_TEXTURE);
10582
+ ReleaseTextures(checker.GetTextures());
983410583 }
983510584
983610585 if (object.parent != null)
....@@ -9843,7 +10592,7 @@
984310592 //gl.glDisable(GL.GL_VERTEX_PROGRAM_ARB);
984410593 //gl.glDisable(GL.GL_FRAGMENT_PROGRAM_ARB);
984510594
9846
- if (DISPLAYTEXT && drawMode == DEFAULT)
10595
+ if (DISPLAYTEXT && DrawMode() == DEFAULT)
984710596 {
984810597 // Draw it once, then use the raster
984910598 Balloon(gl, balloon.createGraphics());
....@@ -9899,9 +10648,9 @@
989910648 int[] xs = new int[3];
990010649 int[] ys = new int[3];
990110650
9902
- void DrawString(Object3D obj) // String string)
10651
+ public void DrawString(Object3D obj) // String string) // INTERFACE
990310652 {
9904
- if (!DISPLAYTEXT || drawMode != DEFAULT)
10653
+ if (!DISPLAYTEXT || DrawMode() != DEFAULT)
990510654 {
990610655 return;
990710656 }
....@@ -10388,6 +11137,7 @@
1038811137 "PARAM lodbias = { 10,10,10,10 };" + // 20, -2, -20, 1.0 };" +
1038911138 "PARAM infinity = { 100000000, 100000000, 100000000, 1.0 };" +
1039011139 "PARAM one2048th = { 0.00048828125, 0.00048828125, 0.00048828125, 1.0 };" +
11140
+ "PARAM ninetenth = { 0.9, 0.9, 0.9, 1.0 };" +
1039111141 "PARAM almostone = { 0.999, 0.999, 0.999, 1.0 };" +
1039211142 "PARAM c256 = { 256, 256, 256, 1.0 };" +
1039311143 "PARAM c256i = { 0.00390625, 0.00390625, 0.00390625, 1.0 };" +
....@@ -11302,6 +12052,7 @@
1130212052 String Shadow(String depth, String shadow)
1130312053 {
1130412054 return "MAX temp.x, ndotl.x, one64th.x;" +
12055
+ "MIN temp.x, temp.x, ninetenth.x;" +
1130512056 /**/
1130612057 // Sine
1130712058 "MUL temp.y, temp.x, temp.x;" +
....@@ -11926,9 +12677,10 @@
1192612677 return;
1192712678 }
1192812679
12680
+ boolean capsLocked = Toolkit.getDefaultToolkit().getLockingKeyState(KeyEvent.VK_CAPS_LOCK);
1192912681
1193012682 // TIMER
11931
- if (!wheeltimer.isRunning() && e.getModifiersEx() == 0) // VR
12683
+ if (!wheeltimer.isRunning() && e.getModifiersEx() == 0 && !capsLocked) // VR
1193212684 {
1193312685 keepboxmode = BOXMODE;
1193412686 keepsupport = SUPPORT;
....@@ -12057,7 +12809,7 @@
1205712809 // ObjEditor.tweenManager.update(1f / 60f);
1205812810
1205912811 // fev 2014???
12060
- if ((TRACK || SHADOWTRACK) && trackedobject != null) // && drawMode == SHADOW) // && !lightMode)
12812
+ if ((TRACK || SHADOWTRACK) && trackedobject != null) // && DrawMode() == SHADOW) // && !lightMode)
1206112813 object.editWindow.ScreenFit(trackedobject, SHADOWTRACK && !TRACK);
1206212814 pingthread.StepToTarget(true); // true);
1206312815 }
....@@ -12308,7 +13060,7 @@
1230813060 //System.out.println("---------------- ---------- Paint " + tmp.length2());
1230913061 if (lightMode)
1231013062 {
12311
- lighttouched = true;
13063
+ Globals.lighttouched = true;
1231213064 }
1231313065
1231413066 if (OEILONCE && OEIL)
....@@ -12366,7 +13118,7 @@
1236613118 mouseDown = false;
1236713119 if (lightMode)
1236813120 {
12369
- lighttouched = true;
13121
+ Globals.lighttouched = true;
1237013122 }
1237113123 repaint();
1237213124 alreadypainted = true;
....@@ -12374,7 +13126,7 @@
1237413126 isMoving = false;
1237513127 } //??
1237613128
12377
- if (isLIVE() && !alreadypainted)
13129
+ if (Globals.isLIVE() && !alreadypainted)
1237813130 {
1237913131 // FOR DEBUG BREAKPOINT USING PAUSE: while (true)
1238013132 repaint();
....@@ -12386,7 +13138,7 @@
1238613138 {
1238713139 if (lightMode)
1238813140 {
12389
- lighttouched = true;
13141
+ Globals.lighttouched = true;
1239013142 }
1239113143 drag(X, (mouseMode != 0) ? Y : anchorY, MODIFIERS);
1239213144 }
....@@ -12629,6 +13381,7 @@
1262913381 {
1263013382 manipCamera.Translate(dx, dy, getWidth());
1263113383 }
13384
+ else
1263213385 if ((mouseMode & ZOOM) == 0 && (mouseMode & VR) != 0)
1263313386 {
1263413387 manipCamera.RotateInterest(dx, dy);
....@@ -12639,7 +13392,7 @@
1263913392
1264013393 if (manipCamera == lightCamera)
1264113394 {
12642
- lighttouched = true;
13395
+ Globals.lighttouched = true;
1264313396 }
1264413397 /*
1264513398 switch (mode)
....@@ -12862,7 +13615,7 @@
1286213615 }
1286313616 if ((modifiers & CTRLCLICK) == CTRLCLICK)
1286413617 {
12865
- mouseMode |= SELECT; // BACKFORTH;
13618
+ mouseMode |= SELECT;
1286613619 }
1286713620 if ((modifiers & COMMAND) == COMMAND)
1286813621 {
....@@ -13027,7 +13780,7 @@
1302713780 case 'B':
1302813781 BRISMOOTH ^= true;
1302913782 SHADOWCULLFACE ^= true;
13030
- lighttouched = true;
13783
+ Globals.lighttouched = true;
1303113784 repaint();
1303213785 break;
1303313786 case 'b':
....@@ -13127,7 +13880,7 @@
1312713880 repaint();
1312813881 break;
1312913882 case 'O':
13130
- drawMode = OCCLUSION;
13883
+ Globals.drawMode = OCCLUSION; // WARNING
1313113884 repaint();
1313213885 break;
1313313886 case 'o':
....@@ -13218,7 +13971,7 @@
1321813971 break;
1321913972 case ' ':
1322013973 lightMode ^= true;
13221
- lighttouched = true;
13974
+ Globals.lighttouched = true;
1322213975 manipCamera = renderCamera = lightMode ? lightCamera : eyeCamera;
1322313976 targetLookAt.set(manipCamera.lookAt);
1322413977 repaint();
....@@ -13230,11 +13983,11 @@
1323013983 repaint();
1323113984 break;
1323213985 case 'Z':
13233
- RESIZETEXTURE ^= true;
13234
- break;
13986
+ //RESIZETEXTURE ^= true;
13987
+ //break;
1323513988 case 'z':
1323613989 RENDERSHADOW ^= true;
13237
- lighttouched = true;
13990
+ Globals.lighttouched = true;
1323813991 repaint();
1323913992 break;
1324013993 //case UP:
....@@ -13836,6 +14589,7 @@
1383614589 //if (g != gr) g.drawImage(img, 0, 0, width, height, null);
1383714590 }
1383814591
14592
+ // To avoid clear.
1383914593 public void update(Graphics g)
1384014594 {
1384114595 paint(g);
....@@ -14438,7 +15192,7 @@
1443815192 gl.glPushAttrib(GL.GL_ALL_ATTRIB_BITS);
1443915193 gl.glPushMatrix();
1444015194 gl.glLoadIdentity();
14441
- PushMatrix(checker.toParent);
15195
+ //PushMatrix(checker.toParent);
1444215196
1444315197 gl.glMatrixMode(GL.GL_TEXTURE);
1444415198 gl.glPushMatrix();
....@@ -14461,8 +15215,8 @@
1446115215
1446215216 gl.glNormal3f(0.0f, 0.0f, 1.0f);
1446315217
14464
- float step = 0.1666f; //0.25f;
14465
- float stepv = step * 1652 / 998;
15218
+ float step = 2; // 0.1666f; //0.25f;
15219
+ float stepv = 2; // step * 1652 / 998;
1446615220
1446715221 int i0 = 0;
1446815222 /*
....@@ -14498,20 +15252,21 @@
1449815252 /**/
1449915253 //checker.GetMaterial().opacity = 1.1f;
1450015254 ////checker.GetMaterial().ambient = 0.99f;
14501
- Object3D.materialstack[Object3D.materialdepth] = checker.material;
14502
- Object3D.selectedstack[Object3D.materialdepth] = false;
14503
- cStatic.objectstack[Object3D.materialdepth++] = checker;
15255
+ materialstack[materialdepth] = checker.material;
15256
+ selectedstack[materialdepth] = false;
15257
+ cStatic.objectstack[materialdepth++] = checker;
1450415258 //System.out.println("material " + material);
1450515259 //Applet3D.tracein(this, selected);
1450615260 vector2buffer = checker.projectedVertices;
1450715261
14508
- checker.GetMaterial().Draw(this, false); // true);
15262
+ //checker.GetMaterial().Draw(this, false); // true);
15263
+ DrawMaterial(checker.GetMaterial(), false); // true);
1450915264
14510
- Object3D.materialdepth -= 1;
14511
- if (Object3D.materialdepth > 0)
15265
+ materialdepth -= 1;
15266
+ if (materialdepth > 0)
1451215267 {
14513
- vector2buffer = cStatic.objectstack[Object3D.materialdepth - 1].projectedVertices;
14514
- Object3D.materialstack[Object3D.materialdepth - 1].Draw(this, Object3D.selectedstack[Object3D.materialdepth - 1]);
15268
+ vector2buffer = cStatic.objectstack[materialdepth - 1].projectedVertices;
15269
+ DrawMaterial(materialstack[materialdepth - 1], selectedstack[materialdepth - 1]);
1451515270 }
1451615271 //checker.GetMaterial().opacity = 1f;
1451715272 ////checker.GetMaterial().ambient = 1f;
....@@ -14532,15 +15287,27 @@
1453215287
1453315288 //float u = (i+1)/2;
1453415289 //float v = (j+1)/2;
14535
- gl.glTexCoord2f((i + 1) / 2, (j + 1) / 2); // (1,0) // (i+1+step)/2,(j+1)/2);
15290
+ if (checker.flipV)
15291
+ gl.glTexCoord2f((i + 1) / 2, 1 - (j + 1) / 2);
15292
+ else
15293
+ gl.glTexCoord2f((i + 1) / 2, (j + 1) / 2); // (1,0) // (i+1+step)/2,(j+1)/2);
1453615294 gl.glVertex3f(i, j, -0.5f);
1453715295
15296
+ if (checker.flipV)
15297
+ gl.glTexCoord2f((i + 1 + step) / 2, 1 - (j + 1) / 2); // (1,1) // (i+1+step)/2,(j+1+step)/2);
15298
+ else
1453815299 gl.glTexCoord2f((i + 1 + step) / 2, (j + 1) / 2); // (1,1) // (i+1+step)/2,(j+1+step)/2);
1453915300 gl.glVertex3f(i + step, j, -0.5f);
1454015301
15302
+ if (checker.flipV)
15303
+ gl.glTexCoord2f((i + 1 + step) / 2, 1 - (j + 1 + stepv) / 2); // (0,1) //(i+1)/2,(j+1+step)/2);
15304
+ else
1454115305 gl.glTexCoord2f((i + 1 + step) / 2, (j + 1 + stepv) / 2); // (0,1) //(i+1)/2,(j+1+step)/2);
1454215306 gl.glVertex3f(i + step, j + stepv, -0.5f);
1454315307
15308
+ if (checker.flipV)
15309
+ gl.glTexCoord2f((i + 1) / 2, 1 - (j + 1 + stepv) / 2); // (0,0) //(i+1)/2,(j+1)/2);
15310
+ else
1454415311 gl.glTexCoord2f((i + 1) / 2, (j + 1 + stepv) / 2); // (0,0) //(i+1)/2,(j+1)/2);
1454515312 gl.glVertex3f(i, j + stepv, -0.5f);
1454615313 }
....@@ -14552,7 +15319,7 @@
1455215319 gl.glMatrixMode(GL.GL_PROJECTION);
1455315320 gl.glPopMatrix();
1455415321 gl.glMatrixMode(GL.GL_MODELVIEW);
14555
- PopMatrix(null); // checker.toParent); // null);
15322
+ //PopMatrix(null); // checker.toParent); // null);
1455615323 gl.glPopMatrix();
1455715324 PopTextureMatrix(checker.toParent);
1455815325 gl.glMatrixMode(GL.GL_TEXTURE);
....@@ -14665,14 +15432,14 @@
1466515432
1466615433 //int tmp = selection_view;
1466715434 //selection_view = -1;
14668
- int temp = drawMode;
14669
- drawMode = SELECTION;
15435
+ int temp = DrawMode();
15436
+ Globals.drawMode = SELECTION; // WARNING
1467015437 indexcount = 0;
1467115438 parent.display(drawable);
1467215439 //selection_view = tmp;
1467315440 //if (temp == SELECTION)
1467415441 // temp = DEFAULT; // patch for selection debug
14675
- drawMode = temp;
15442
+ Globals.drawMode = temp; // WARNING
1467615443
1467715444 //gl.glBindTexture(GL.GL_TEXTURE_2D, selection_view);
1467815445
....@@ -14945,14 +15712,14 @@
1494515712 //gl.glColorMask(false, false, false, false);
1494615713
1494715714 //render_scene_from_light_view(gl, drawable, 0, 0);
14948
- if (RENDERSHADOW && lighttouched && !movingcamera) // && !parent.IsFreezed())
15715
+ if (RENDERSHADOW && Globals.lighttouched && !movingcamera) // && !parent.IsFreezed())
1494915716 {
1495015717 gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
1495115718
14952
- int temp = drawMode;
14953
- drawMode = SHADOW;
15719
+ int temp = DrawMode();
15720
+ Globals.drawMode = SHADOW; // WARNING
1495415721 parent.display(drawable);
14955
- drawMode = temp;
15722
+ Globals.drawMode = temp; // WARNING
1495615723 }
1495715724
1495815725 gl.glCullFace(gl.GL_BACK);
....@@ -15115,13 +15882,19 @@
1511515882 gl.glFlush();
1511615883
1511715884 /**/
15118
- gl.glReadPixels(0, 0, OCCLUSION_SIZE, OCCLUSION_SIZE, GL.GL_BGRA, GL.GL_UNSIGNED_INT_8_8_8_8_REV, occlusionsizebuffer);
15885
+ gl.glReadPixels(0, 0, OCCLUSION_SIZE, OCCLUSION_SIZE, GL.GL_DEPTH_COMPONENT, GL.GL_FLOAT, occlusionsizebuffer);
1511915886
15120
- int[] pixels = occlusionsizebuffer.array();
15887
+ float[] pixels = occlusionsizebuffer.array();
1512115888
1512215889 double r = 0, g = 0, b = 0;
1512315890
1512415891 double count = 0;
15892
+
15893
+ gl.glGetDoublev(gl.GL_PROJECTION_MATRIX, tempmat2, 0);
15894
+
15895
+ float mindepth = 1;
15896
+
15897
+ double FACTOR = 1;
1512515898
1512615899 for (int i = 0; i < pixels.length; i++)
1512715900 {
....@@ -15206,7 +15979,7 @@
1520615979
1520715980 double scale = ray.z; // 1; // cos
1520815981
15209
- int p = pixels[newindex];
15982
+ float depth = pixels[newindex];
1521015983
1521115984 /*
1521215985 int newindex2 = (x + 1) * OCCLUSION_SIZE + y;
....@@ -15230,10 +16003,23 @@
1523016003 scale = (1 - modu) * modv;
1523116004 */
1523216005
15233
- r += ((p >> 16) & 0xFF) * scale / 255;
15234
- g += ((p >> 8) & 0xFF) * scale / 255;
15235
- b += (p & 0xFF) * scale / 255;
16006
+ //r += ((p >> 16) & 0xFF) * scale / 255;
16007
+ //g += ((p >> 8) & 0xFF) * scale / 255;
16008
+ //b += (p & 0xFF) * scale / 255;
16009
+
16010
+ if (mindepth > depth)
16011
+ {
16012
+ mindepth = depth;
16013
+ }
1523616014
16015
+ double z_eye = tempmat2[3*4 + 2] / (depth * -2.0 + 1.0 - tempmat2[2*4 + 2]);
16016
+
16017
+ double factor = 1 - Math.exp(-z_eye * z_eye / FACTOR);
16018
+
16019
+ r += factor * scale;
16020
+ g += factor * scale;
16021
+ b += factor * scale;
16022
+
1523716023 count += scale;
1523816024 }
1523916025
....@@ -15331,12 +16117,6 @@
1533116117 GLUT glut = new GLUT();
1533216118
1533316119
15334
- static final public int DEFAULT = 0;
15335
- static final public int SELECTION = 1;
15336
- static final public int SHADOW = 2;
15337
- static final public int OCCLUSION = 3;
15338
- static
15339
- public int drawMode = DEFAULT;
1534016120 public boolean spherical = false;
1534116121 static boolean DEBUG_OCCLUSION = false;
1534216122 static boolean DEBUG_SELECTION = false;
....@@ -15351,10 +16131,10 @@
1535116131 //double[] selectedpoint = new double[3];
1535216132 static Superellipsoid selectedpoint = new Superellipsoid();
1535316133 static Sphere previousselectedpoint = null;
15354
- static Sphere debugpoint = new Sphere();
15355
- static Sphere debugpoint2 = new Sphere();
15356
- static Sphere debugpoint3 = new Sphere();
15357
- static Sphere debugpoint4 = new Sphere();
16134
+ static Sphere debugpointG = new Sphere();
16135
+ static Sphere debugpointP = new Sphere();
16136
+ static Sphere debugpointC = new Sphere();
16137
+ static Sphere debugpointR = new Sphere();
1535816138
1535916139 static Sphere debugpoints[] = new Sphere[8];
1536016140
....@@ -15407,7 +16187,8 @@
1540716187 static IntBuffer texturesizebuffer = IntBuffer.allocate(TEX_SIZE * TEX_SIZE);
1540816188 static IntBuffer selectsizebuffer = IntBuffer.allocate(SELECT_SIZE * SELECT_SIZE);
1540916189 static java.nio.FloatBuffer pointselectsizebuffer = java.nio.FloatBuffer.allocate(SELECT_SIZE * SELECT_SIZE);
15410
- static IntBuffer occlusionsizebuffer = IntBuffer.allocate(OCCLUSION_SIZE * OCCLUSION_SIZE);
16190
+ //static IntBuffer occlusionsizebuffer = IntBuffer.allocate(OCCLUSION_SIZE * OCCLUSION_SIZE);
16191
+ static java.nio.FloatBuffer occlusionsizebuffer = java.nio.FloatBuffer.allocate(OCCLUSION_SIZE * OCCLUSION_SIZE);
1541116192 static BufferedImage bufimage = new BufferedImage(TEX_SIZE, TEX_SIZE, BufferedImage.TYPE_INT_RGB);
1541216193 static BufferedImage textest = new cBufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB);
1541316194 static java.util.Vector<BufferedImage> billboards = new java.util.Vector<BufferedImage>();