Normand Briere
2019-10-01 e8908d5b90d44e43b9da885bc0202fb665a912d0
Object3D.java
....@@ -41,6 +41,8 @@
4141
4242 java.util.Hashtable<java.util.UUID, Object3D> versiontable; // = new java.util.Hashtable<java.util.UUID, Object3D>();
4343
44
+ int tabIndex;
45
+
4446 ScriptNode scriptnode;
4547
4648 void deepCopyNode(Object3D other)
....@@ -100,7 +102,7 @@
100102 other.softtouched = softtouched;
101103
102104 other.random = random;
103
- other.link2master = link2master;
105
+ other.link2master = Link2Support();
104106 other.transformcount = transformcount;
105107 other.marked = marked;
106108 other.skip = skip;
....@@ -220,7 +222,7 @@
220222 return;
221223
222224 transientsupport = support;
223
- transientlink2master = link2master;
225
+ transientlink2master = Link2Support();
224226
225227 support = null;
226228 link2master = false;
....@@ -633,7 +635,10 @@
633635 transient boolean keepdontselect;
634636 boolean dontselect = false;
635637 boolean hide = false;
636
- boolean link2master = false; // performs reset support/master at each frame
638
+
639
+ boolean link2master = false; // performs reset support/master at each frame (cannot rename due to serialization)
640
+ boolean link2support = false; // (cannot rename due to serialization)
641
+
637642 boolean marked = false; // animation node
638643 boolean skip = false; // centroid issue
639644 boolean skipmocap = false; // mocap data
....@@ -1023,7 +1028,7 @@
10231028
10241029 void Step()
10251030 {
1026
- // marde pour serialization de Texture
1031
+ // patch pour serialization de Texture
10271032 resetmaxcount();
10281033 resettransformcount();
10291034 resetstep();
....@@ -4101,11 +4106,6 @@
41014106 Step();
41024107 Touch();
41034108
4104
- StepRecur();
4105
- }
4106
-
4107
- void StepRecur()
4108
- {
41094109 for (int i = 0; i < size(); i++)
41104110 {
41114111 Object3D child = (Object3D) get(i); // reserve(i);
....@@ -6159,7 +6159,7 @@
61596159 boolean NeedSupport()
61606160 {
61616161 return
6162
- CameraPane.SUPPORT && (!CameraPane.movingcamera || (!Globals.FREEZEONMOVE && Globals.isLIVE())) && link2master && /*live &&*/ support != null
6162
+ CameraPane.SUPPORT && (!CameraPane.movingcamera || (!Globals.FREEZEONMOVE && Globals.isLIVE())) && Link2Support() && /*live &&*/ support != null
61636163 // PROBLEM with CROWD!!
61646164 && (Globals.DrawMode() == iCameraPane.SHADOW || !Globals.RENDERSHADOW || Globals.CROWD);
61656165 }
....@@ -6182,6 +6182,15 @@
61826182 return live && bRep != null;
61836183 }
61846184
6185
+ boolean Link2Support()
6186
+ {
6187
+ return link2master || link2support;
6188
+ }
6189
+
6190
+ static cVector minima = new cVector();
6191
+ static cVector maxima = new cVector();
6192
+ static javax.vecmath.Point3d center = new javax.vecmath.Point3d();
6193
+
61856194 void Draw(iCameraPane display, Object3D /*Composite*/ root, boolean selected, boolean blocked)
61866195 {
61876196 Invariants(); // june 2013
....@@ -6189,6 +6198,29 @@
61896198 if (support != null)
61906199 {
61916200 // System.err.println("Draw " + this + " Frame # " + ((Mocap)((Merge)support).object).frame);
6201
+ }
6202
+
6203
+ if (live && Link2Support() && support == null && !this.marked) // project on ground
6204
+ {
6205
+ getBounds(minima, maxima, true);
6206
+ center.x = (minima.x + maxima.x) / 2;
6207
+ center.y = 10000; // (minima.y + maxima.y) / 2;
6208
+ center.z = (minima.z + maxima.z) / 2;
6209
+
6210
+ Ray ray = new Ray(center, new Vector3d(0,-1,0));
6211
+
6212
+ IntersectResult res = new IntersectResult();
6213
+ res.t = Double.POSITIVE_INFINITY;
6214
+
6215
+ if (Grafreed.grafreed.universe.intersect(ray, res))
6216
+ {
6217
+ double resx = ray.eyePoint.x + ray.viewDirection.x * res.t;
6218
+ double resy = ray.eyePoint.y + ray.viewDirection.y * res.t;
6219
+ double resz = ray.eyePoint.z + ray.viewDirection.z * res.t;
6220
+
6221
+ LA.matTranslate(toParent, 0, resy - minima.y, 0);
6222
+ LA.matInvert(toParent, fromParent);
6223
+ }
61926224 }
61936225
61946226 if (display.DrawMode() == iCameraPane.SELECTION &&
....@@ -6243,7 +6275,7 @@
62436275 support = support;
62446276
62456277 boolean usecalllists = !IsDynamic() &&
6246
- IsStatic() && GetBRep() != null && (!CameraPane.SUPPORT || support == null || !link2master); // !(this instanceof cSpring) && !(this instanceof BezierPatch);
6278
+ IsStatic() && GetBRep() != null && (!CameraPane.SUPPORT || support == null || !Link2Support()); // !(this instanceof cSpring) && !(this instanceof BezierPatch);
62476279 //boolean usecalllists = false; //!IsLive(); // IsStatic() && GetBRep() != null && (!CameraPane.SUPPORT || support == null) && !link2master; // !(this instanceof cSpring) && !(this instanceof BezierPatch);
62486280
62496281 //usecalllists &= display.DrawMode() == display.DEFAULT; // Don't compute list in shadow pass.
....@@ -6254,7 +6286,8 @@
62546286 bRep.displaylist = 0;
62556287 }
62566288 // usecalllists &= !(parent instanceof RandomNode);
6257
- // usecalllists = false;
6289
+ if (CameraPane.BOXMODE) // Too dynamic
6290
+ usecalllists = false;
62586291
62596292 if (display.DrawMode() == display.SHADOW)
62606293 //GetBRep() != null)
....@@ -6350,7 +6383,7 @@
63506383 {
63516384 if (display.DrawMode() == iCameraPane.SHADOW)
63526385 {
6353
- if (!link2master // tricky to cull in shadow mode.
6386
+ if (!Link2Support() // tricky to cull in shadow mode.
63546387 && GetBRep().FrustumCull(this, null, display.LightCamera(), true))
63556388 {
63566389 //System.out.print("CULLED");
....@@ -6823,7 +6856,7 @@
68236856
68246857 //javax.media.opengl.GL gl = display.GetGL();
68256858
6826
- if (CameraPane.BOXMODE && !selected) // || CameraPane.movingcamera)
6859
+ if (CameraPane.BOXMODE && !Link2Support()) //selected) // || CameraPane.movingcamera)
68276860 {
68286861 int fc = bRep.FaceCount();
68296862 int vc = bRep.VertexCount();
....@@ -6985,7 +7018,7 @@
69857018 facescompare[k] = new FaceCompare(k);
69867019 }
69877020
6988
- center = new cVector();
7021
+ centertriangle = new cVector();
69897022 }
69907023 else
69917024 {
....@@ -7108,7 +7141,7 @@
71087141 */
71097142 }
71107143
7111
- transient cVector center;
7144
+ transient cVector centertriangle;
71127145
71137146 class FaceCompare implements Comparable
71147147 {
....@@ -7137,14 +7170,14 @@
71377170 Vertex q = bRep.GetVertex(face.q);
71387171 Vertex r = bRep.GetVertex(face.r);
71397172
7140
- center.set(p);
7141
- center.add(q);
7142
- center.add(r);
7143
- center.mul(1.0/3);
7173
+ centertriangle.set(p);
7174
+ centertriangle.add(q);
7175
+ centertriangle.add(r);
7176
+ centertriangle.mul(1.0/3);
71447177
7145
- center.sub(Globals.theRenderer.EyeCamera().location);
7178
+ centertriangle.sub(Globals.theRenderer.EyeCamera().location);
71467179
7147
- distance = center.dot(center);
7180
+ distance = centertriangle.dot(centertriangle);
71487181 }
71497182
71507183 return distance;
....@@ -8327,7 +8360,7 @@
83278360
83288361 public int hashCode()
83298362 {
8330
- // Fuck Vector...
8363
+ // Do not use Vector...
83318364 return System.identityHashCode(this);
83328365 }
83338366
....@@ -8869,7 +8902,7 @@
88698902 double diry = ray.viewDirection.y;
88708903 double dirz = ray.viewDirection.z;
88718904
8872
- if (this.fromParent != null)
8905
+ if (this.fromParent != null && !(this instanceof TextureNode))
88738906 {
88748907 eye.x = eyex;
88758908 eye.y = eyey;
....@@ -8894,7 +8927,7 @@
88948927
88958928 boolean touch = false;
88968929
8897
- if (bRep != null)
8930
+ if (bRep != null && Link2Support())
88988931 {
88998932 if (bbox == null)
89008933 {
....@@ -8903,7 +8936,7 @@
89038936 cVector min = new cVector();
89048937 cVector max = new cVector();
89058938
8906
- this.getBounds(min, max, false);
8939
+ this.getBounds(min, max, true);
89078940
89088941 bbox.min.x = min.x;
89098942 bbox.min.y = min.y;
....@@ -8914,7 +8947,7 @@
89148947 bbox.max.z = max.z;
89158948 }
89168949
8917
- if (bbox.intersect(ray, result))
8950
+ if (true) // NOT WORKING bbox.intersect(ray, result))
89188951 {
89198952 success |= intersectMesh(ray, result);
89208953 }
....@@ -8958,6 +8991,12 @@
89588991
89598992 private boolean intersectTriangle(Ray ray, IntersectResult result, Vertex v1, Vertex v2, Vertex v3)
89608993 {
8994
+ if (false)
8995
+ {
8996
+ result.t = 0;
8997
+ return true;
8998
+ }
8999
+
89619000 /*
89629001 Fast, Minimum Storage Ray/Triangle Intersection, Moller et al.
89639002