BoundaryRep.java | ●●●●● patch | view | raw | blame | history | |
CameraPane.java | ●●●●● patch | view | raw | blame | history | |
Globals.java | ●●●●● patch | view | raw | blame | history | |
Grafreed.java | ●●●●● patch | view | raw | blame | history | |
GroupEditor.java | ●●●●● patch | view | raw | blame | history | |
LA.java | ●●●●● patch | view | raw | blame | history | |
Mocap.java | ●●●●● patch | view | raw | blame | history | |
ObjEditor.java | ●●●●● patch | view | raw | blame | history | |
Object3D.java | ●●●●● patch | view | raw | blame | history | |
SwitchEditor.java | ●●●●● patch | view | raw | blame | history | |
cFileSystemPane.java | ●●●●● patch | view | raw | blame | history | |
cJ3D.java | ●●●●● patch | view | raw | blame | history |
BoundaryRep.java
.. .. @@ -500,7 +500,7 @@ 500 500 static Vertex vertextemp = new Vertex(true); 501 501 static Vertex vertextemp2 = new Vertex(true); 502 502 503 - static double SEUIL = 0.1f; // 0.1 for rag doll; 0.07;503 + static double SEUIL = 0.05f; // 0.1 for rag doll; 0.07;504 504 505 505 // Compute weight of point w/r to this 506 506 float ComputeWeight(Vertex v, double[][] toRoot, int k) CameraPane.java
.. .. @@ -14870,7 +14870,7 @@ 14870 14870 //RESIZETEXTURE ^= true; 14871 14871 //break; 14872 14872 case 'z': 14873 - RENDERSHADOW ^= true;14873 + Globals.RENDERSHADOW ^= true;14874 14874 Globals.lighttouched = true; 14875 14875 repaint(); 14876 14876 break; .. .. @@ -16592,7 +16592,7 @@ 16592 16592 gl.glDisable(gl.GL_CULL_FACE); 16593 16593 } 16594 16594 16595 - if (!RENDERSHADOW)16595 + if (!Globals.RENDERSHADOW)16596 16596 gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); 16597 16597 16598 16598 // SB gl.glPolygonOffset(2.5f, 10); .. .. @@ -16602,7 +16602,7 @@ 16602 16602 //gl.glColorMask(false, false, false, false); 16603 16603 16604 16604 //render_scene_from_light_view(gl, drawable, 0, 0); 16605 - if (RENDERSHADOW && Globals.lighttouched && !movingcamera) // && !parent.IsFreezed())16605 + if (Globals.RENDERSHADOW && Globals.lighttouched && !movingcamera) // && !parent.IsFreezed())16606 16606 { 16607 16607 gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); 16608 16608 Globals.java
.. .. @@ -6,6 +6,7 @@ 6 6 static iCameraPane theRenderer; 7 7 8 8 private static boolean LIVE = false; 9 + public static boolean RENDERSHADOW = true;9 10 10 11 static boolean CROWD = false; 11 12 static public int drawMode = iCameraPane.DEFAULT; // WARNING Grafreed.java
.. .. @@ -41,7 +41,11 @@ 41 41 static void Assert(boolean b) 42 42 { 43 43 if (!b) 44 + {45 + b = !!b;44 46 new Exception().printStackTrace(); // assert(b); 47 +48 + }45 49 } 46 50 47 51 public void init() .. .. @@ -844,7 +848,7 @@ 844 848 //Monitor mon=MonitorFactory.start("myFirstMonitor"); 845 849 standAlone = true; 846 850 grafreeD = new Grafreed(); 847 - grafreeD.universe = new Composite();851 + grafreeD.universe = new cGroup();848 852 grafreeD.universe.name = "Grafreed"; 849 853 grafreeD.universe.material = new cMaterial(); 850 854 // theApplet3D.universe.textures = CameraPane.DEFAULT_TEXTURE; GroupEditor.java
.. .. @@ -318,8 +318,12 @@ 318 318 resetTransformItem.addActionListener(this); 319 319 resetCentroidItem = menu.add(new MenuItem("Reset Centroid")); 320 320 resetCentroidItem.addActionListener(this); 321 - transformgeometryItem = menu.add(new MenuItem("Transform Geometry"));322 - transformgeometryItem.addActionListener(this);321 + resetCentroidXZItem = menu.add(new MenuItem("Reset Centroid XY"));322 + resetCentroidXZItem.addActionListener(this);323 + transformGeometryItem = menu.add(new MenuItem("Transform Geometry"));324 + transformGeometryItem.addActionListener(this);325 + transformChildrenItem = menu.add(new MenuItem("Transform Children"));326 + transformChildrenItem.addActionListener(this);323 327 324 328 oe.menuBar.add(menu = new Menu("Geometry")); 325 329 genUVItem = menu.add(new MenuItem("Generate UV")); .. .. @@ -422,17 +426,18 @@ 422 426 sortbysizeItem.addActionListener(this); 423 427 sortbynameItem = menu.add(new MenuItem("Sort by name")); 424 428 sortbynameItem.addActionListener(this); 429 + menu.add("-");430 + shareGeometriesItem = menu.add(new MenuItem("Share Geometries"));431 + shareGeometriesItem.addActionListener(this);432 + mergeGeometriesItem = menu.add(new MenuItem("Merge Geometries"));433 + mergeGeometriesItem.addActionListener(this);425 434 if (Globals.ADVANCED) 426 435 { 427 - menu.add("-");436 + // Pretty much the same as duplicate and clone.428 437 extractGeometriesItem = menu.add(new MenuItem("Link Geometry")); 429 438 extractGeometriesItem.addActionListener(this); 430 439 cloneGeometriesItem = menu.add(new MenuItem("Clone Geometry")); 431 440 cloneGeometriesItem.addActionListener(this); 432 - shareGeometriesItem = menu.add(new MenuItem("Share Geometry"));433 - shareGeometriesItem.addActionListener(this);434 - mergeGeometriesItem = menu.add(new MenuItem("Merge Geometry"));435 - mergeGeometriesItem.addActionListener(this);436 441 } 437 442 438 443 oe.menuBar.add(menu = new Menu("Insert")); .. .. @@ -651,7 +656,7 @@ 651 656 zoomBoxCB.setToolTipText("Display bounding boxes when moving the wheel"); 652 657 zoomBoxCB.addItemListener(this); 653 658 654 - if (Globals.ADVANCED)659 + if (true) // Globals.ADVANCED)655 660 { 656 661 panel.add(supportCB = new cCheckBox("Support", CameraPane.SUPPORT)); //, constraints); 657 662 supportCB.setToolTipText("Enable rigging"); .. .. @@ -2614,9 +2619,13 @@ 2614 2619 { 2615 2620 SmoothMesh(); 2616 2621 } else 2617 - if (source == transformgeometryItem)2622 + if (source == transformGeometryItem)2618 2623 { 2619 2624 TransformGeometry(); 2625 + } else2626 + if (source == transformChildrenItem)2627 + {2628 + TransformChildren();2620 2629 } else 2621 2630 if (source == resetTransformItem) 2622 2631 { .. .. @@ -2624,7 +2633,11 @@ 2624 2633 } else 2625 2634 if (source == resetCentroidItem) 2626 2635 { 2627 - ResetCentroid();2636 + ResetCentroid(true);2637 + } else2638 + if (source == resetCentroidXZItem)2639 + {2640 + ResetCentroid(false);2628 2641 } else 2629 2642 if (source == resetParentItem) 2630 2643 { .. .. @@ -3140,6 +3153,28 @@ 3140 3153 refreshContents(); 3141 3154 } 3142 3155 3156 + void TransformChildren()3157 + {3158 + Object3D obj;3159 + for (Enumeration e = group.selection.elements(); e.hasMoreElements();)3160 + {3161 + obj = (Object3D)e.nextElement();3162 + obj.KeepTextureMatrices();3163 + obj.TransformChildren();3164 + obj.RestoreTextureMatrices();3165 +3166 +// if (obj.parent == null)3167 +// {3168 +// System.out.println("NULL PARENT!");3169 +// new Exception().printStackTrace();3170 +// }3171 +// else3172 +// TouchTransform(obj);3173 +// //obj.parent.Touch();3174 + }3175 +3176 + refreshContents();3177 + }3143 3178 3144 3179 void ResetTransform() 3145 3180 { .. .. @@ -3252,7 +3287,7 @@ 3252 3287 refreshContents(); 3253 3288 } 3254 3289 3255 - void ResetCentroid()3290 + void ResetCentroid(boolean full)3256 3291 { 3257 3292 Object3D obj; 3258 3293 for (Enumeration e = group.selection.elements(); e.hasMoreElements();) .. .. @@ -3267,12 +3302,16 @@ 3267 3302 LA.matIdentity(Object3D.mat); 3268 3303 obj.getBounds(minima, maxima, false); 3269 3304 Object3D.mat[3][0] = -(minima.x + maxima.x)/2; 3270 - Object3D.mat[3][1] = -(minima.y + maxima.y)/2;3305 + if (full)3306 + Object3D.mat[3][1] = -(minima.y + maxima.y)/2;3271 3307 Object3D.mat[3][2] = -(minima.z + maxima.z)/2; 3272 3308 obj.TransformMesh(Object3D.mat); 3309 +3273 3310 Object3D.mat[3][0] = (minima.x + maxima.x)/2; 3274 - Object3D.mat[3][1] = (minima.y + maxima.y)/2;3311 + if (full)3312 + Object3D.mat[3][1] = (minima.y + maxima.y)/2;3275 3313 Object3D.mat[3][2] = (minima.z + maxima.z)/2; 3314 +3276 3315 LA.matConcat(Object3D.mat, obj.toParent, obj.toParent); 3277 3316 //Object3D.mat[3][0] = -Object3D.mat[3][0]; 3278 3317 //Object3D.mat[3][1] = -Object3D.mat[3][1]; .. .. @@ -5153,8 +5192,10 @@ 5153 5192 private MenuItem panoTexturesItem; 5154 5193 5155 5194 private MenuItem resetCentroidItem; 5156 - private MenuItem transformgeometryItem;5195 + private MenuItem resetCentroidXZItem;5157 5196 private MenuItem resetTransformItem; 5197 + private MenuItem transformGeometryItem;5198 + private MenuItem transformChildrenItem;5158 5199 private MenuItem hideItem; 5159 5200 private MenuItem grabItem; 5160 5201 private MenuItem backItem; LA.java
.. .. @@ -307,6 +307,7 @@ 307 307 308 308 } 309 309 310 + // Last row should always be 0 0 0 1310 311 Grafreed.Assert(Math.abs(src[0][3]) <= 1E-15); 311 312 Grafreed.Assert(Math.abs(src[1][3]) <= 1E-15); 312 313 Grafreed.Assert(Math.abs(src[2][3]) <= 1E-15); Mocap.java
.. .. @@ -484,6 +484,12 @@ 484 484 { 485 485 Object3D hip = get(0); 486 486 487 + if (toParent == null)488 + {489 + toParent = LA.newMatrix();490 + fromParent = LA.newMatrix();491 + }492 +487 493 LA.matConcat(toParent, hip.get(0).toParent, matrix); 488 494 489 495 mocaporigin.x = matrix[3][0]; .. .. @@ -664,8 +670,8 @@ 664 670 double targetdirx; 665 671 double targetdirz; 666 672 667 - double goalposx = -20;668 - double goalposz = -10;673 + double goalposx = 0; // -20;674 + double goalposz = 0; // -10;669 675 670 676 boolean followpath; 671 677 .. .. @@ -2797,7 +2803,8 @@ 2797 2803 //if (bone._rotationEnabled) 2798 2804 if (//frame > 0 && 2799 2805 !bone.skipmocap && 2800 - !bone.name.contains("head") // &&2806 + !bone.name.contains("head") &&2807 + !bone.name.contains("Head") // &&2801 2808 // !bone.name.contains("rFoot") && 2802 2809 // !bone.name.contains("lFoot") && 2803 2810 // !bone.name.contains("Pinky") && .. .. @@ -3233,8 +3240,8 @@ 3233 3240 3234 3241 // aout 2013 endframe = 0; // june 2013 3235 3242 3236 - //ResetZero();3237 - setPose(frame);3243 + ResetZero();3244 + //setPose(frame);3238 3245 } 3239 3246 3240 3247 static int mocapsupport = 0; .. .. @@ -3300,7 +3307,7 @@ 3300 3307 { 3301 3308 if (support == null) 3302 3309 { 3303 - if (new File(fullname).exists())3310 + if (bvh == null && new File(fullname).exists())3304 3311 ObjEditor.LoadBVHFile(fullname, this, false, beginframe, lastframetest); 3305 3312 else 3306 3313 { .. .. @@ -3889,17 +3896,22 @@ 3889 3896 // if (firstframe) 3890 3897 // return; 3891 3898 3892 - if (!restarted && /*display.restartframe &&*/3893 - Globals.isLIVE() && live && display.DrawMode() == display.SHADOW) // FUCK3899 + if (//!restarted && /*display.restartframe &&*/3900 + Globals.isLIVE() && live && (display.DrawMode() == iCameraPane.SHADOW || !Globals.RENDERSHADOW))3894 3901 { 3895 3902 //display.restartframe = false; 3896 3903 restarted = true; 3904 + //System.err.println("restarted = true");3897 3905 Step(); 3898 3906 } 3899 3907 else 3900 3908 { 3901 - if (Globals.isLIVE() && live && display.DrawMode() != display.SHADOW)3909 + //System.err.println("restarted");3910 + if (Globals.isLIVE() && live && display.DrawMode() != iCameraPane.SHADOW)3911 + {3902 3912 restarted = false; 3913 + //System.err.println("restarted = false");3914 + }3903 3915 } 3904 3916 3905 3917 super.drawSelf(display, root, selected, blocked); ObjEditor.java
.. .. @@ -501,13 +501,13 @@ 501 501 //SendInfo("Name:", "bold"); 502 502 if (sel.GetTextures() != null || debug) 503 503 { 504 - si.SendInfo(sel.toString(), "bold");504 + si.SendInfo(sel.toString() + (Globals.ADVANCED?"":" " + System.identityHashCode(sel)), "bold");505 505 //SendInfo("#children virtual = " + sel.size() + "; real = " + sel.Size() + newline, "regular"); 506 506 if (sel.Size() > 0) 507 507 { 508 508 si.SendInfo("#children = " + sel.Size(), "regular"); 509 509 } 510 - si.SendInfo((debug ? " Parent: " : " ") + sel.parent, "regular");510 + si.SendInfo((debug ? " Parent: " : " ") + sel.parent + (Globals.ADVANCED?"":" " + System.identityHashCode(sel.parent)), "regular");511 511 if (debug) 512 512 { 513 513 try .. .. @@ -549,7 +549,7 @@ 549 549 } 550 550 if (sel.support != null) 551 551 { 552 - si.SendInfo(" support: " + sel.support, "regular");552 + si.SendInfo(" support: " + sel.support + (Globals.ADVANCED?"":" " + System.identityHashCode(sel.support)), "regular");553 553 } 554 554 if (sel.scriptnode != null) 555 555 { Object3D.java
.. .. @@ -797,7 +797,7 @@ 797 797 798 798 if (marked && Globals.isLIVE() && live && 799 799 //TEMP21aug2018 800 - Globals.DrawMode() == iCameraPane.SHADOW &&800 + (Globals.DrawMode() == iCameraPane.SHADOW || !Globals.RENDERSHADOW) &&801 801 currentframe != Globals.framecount) 802 802 { 803 803 currentframe = Globals.framecount; .. .. @@ -912,6 +912,11 @@ 912 912 fromParent = null; // LA.newMatrix(); 913 913 bRep = null; // new BoundaryRep(); 914 914 915 + if (oname != null && oname.equals("LeftHand"))916 + {917 + name = oname;918 + }919 +915 920 /* 916 921 float hue = (float)Math.random(); 917 922 Color col; .. .. @@ -1470,7 +1475,7 @@ 1470 1475 BoundaryRep.SEUIL = other.material.cameralight; 1471 1476 1472 1477 // Set default to 0.1 1473 - BoundaryRep.SEUIL /= 2;1478 + BoundaryRep.SEUIL /= 4; // 2;1474 1479 System.out.println("SEUIL = " + BoundaryRep.SEUIL); 1475 1480 } 1476 1481 .. .. @@ -2983,6 +2988,31 @@ 2983 2988 blockloop = false; 2984 2989 } 2985 2990 2991 + void TransformChildren()2992 + {2993 + if (toParent != null)2994 + {2995 + for (int i=Size(); --i>=0;)2996 + {2997 + Object3D v = get(i);2998 +2999 + if (v.toParent == null)3000 + {3001 + v.toParent = LA.newMatrix();3002 + v.fromParent = LA.newMatrix();3003 + }3004 +3005 + LA.matConcat(v.toParent, toParent, v.toParent);3006 + LA.matConcat(fromParent, v.fromParent, v.fromParent);3007 + }3008 +3009 + toParent = null; // LA.matIdentity(toParent);3010 + fromParent = null; // LA.matIdentity(fromParent);3011 +3012 + Touch();3013 + }3014 + }3015 +2986 3016 void TransformGeometry() 2987 3017 { 2988 3018 Object3D obj = this; .. .. @@ -5379,7 +5409,7 @@ 5379 5409 return 5380 5410 CameraPane.SUPPORT && !CameraPane.movingcamera && link2master && /*live &&*/ support != null 5381 5411 // PROBLEM with CROWD!! 5382 - && (Globals.DrawMode() == iCameraPane.SHADOW || Globals.CROWD);5412 + && (Globals.DrawMode() == iCameraPane.SHADOW || !Globals.RENDERSHADOW || Globals.CROWD);5383 5413 } 5384 5414 5385 5415 static boolean DEBUG_SELECTION = false; .. .. @@ -7368,14 +7398,22 @@ 7368 7398 //return super.toString() + " (id=" + list + ")" + " (brep=" + bRep + ")"; 7369 7399 //return name + " (id=" + list + ")" + " (brep=" + bRep + ") " + super.toString(); 7370 7400 //return name + " (#tri = " + (bRep==null?0:bRep.VertexCount()) + ") " + super.toString(); 7401 +7402 + String objname;7403 +7371 7404 if (false) //parent != null) 7372 7405 { 7373 - return name + " " + System.identityHashCode(this) + " (" + parent.name + " " + System.identityHashCode(parent) + ")";7406 + objname = name + " " + System.identityHashCode(this) + " (" + parent.name + " " + System.identityHashCode(parent) + ")";7374 7407 } else 7375 7408 { 7376 - return GetName() + (Math.abs(count) == 1000 ? (count == 1000 ? " " : " * ") : (" (" + (count /*- 1*/) + ") ")) + /*(IsSelected()?"(selected) ":"") + (touched?"(touched) ":"") */ +System.identityHashCode(this);7409 + objname = GetName() + (Math.abs(count) == 1000 ? (count == 1000 ? " " : " * ") : (" (" + (count /*- 1*/) + ")")) + /*(IsSelected()?"(selected) ":"") + (touched?"(touched) ":"") */ "";7377 7410 } // + super.toString(); 7378 7411 //return name + " (" + (SizeOf.deepSizeOf(this)/1024) + "K) " + this.getClass().getName(); 7412 +7413 + if (!Globals.ADVANCED)7414 + return objname;7415 +7416 + return objname + " " + System.identityHashCode(this);7379 7417 } 7380 7418 7381 7419 public int hashCode() SwitchEditor.java
.. .. @@ -9,6 +9,8 @@ 9 9 class SwitchEditor extends ObjEditor implements //ItemListener, 10 10 ChangeListener, ObjectUI, ActionListener 11 11 { 12 + private cGridBag dampPanel;13 + private cGridBag framePanel;12 14 SwitchEditor(SwitchNode inBP, GroupEditor callee) 13 15 { 14 16 super(inBP,callee); .. .. @@ -69,6 +71,7 @@ 69 71 oe.aConstraints.gridwidth = 1; 70 72 */ 71 73 super.SetupUI2(oe); 74 + framePanel = AddSlider(oe.ctrlPanel, "Child: ", 0, switchnode.getNumFrames()-1, switchnode.child);72 75 73 76 // oe.aConstraints.gridx = 0; 74 77 // oe.aConstraints.gridwidth = 1; .. .. @@ -81,10 +84,11 @@ 81 84 // 82 85 // frameField.setInteger(frameselect.child); 83 86 84 - frameField = (cNumberSlider)AddSlider(oe.ctrlPanel, "Child: ", 0, switchnode.getNumFrames()-1, switchnode.child).getComponent(1);87 + frameField = (cNumberSlider)framePanel.getComponent(1);85 88 oe.ctrlPanel.Return(); 89 + dampPanel = AddSlider(oe.ctrlPanel, "Damp: ", 0, 500, switchnode.speed);86 90 87 - speedField = (cNumberSlider)AddSlider(oe.ctrlPanel, "Damp: ", 0, 500, switchnode.speed).getComponent(1);91 + speedField = (cNumberSlider)dampPanel.getComponent(1);88 92 oe.ctrlPanel.Return(); 89 93 90 94 // oe.aConstraints.gridy += 1; .. .. @@ -224,8 +228,11 @@ 224 228 // oe.ctrlPanel.remove(frameLabel); 225 229 // oe.ctrlPanel.remove(speedField); 226 230 // oe.ctrlPanel.remove(speedLabel); 227 - Remove(frameField);228 - Remove(speedField);231 +// Remove(frameField);232 +// Remove(speedField);233 +234 + oe.ctrlPanel.remove(framePanel);235 + oe.ctrlPanel.remove(dampPanel);229 236 //oe.ctrlPanel.repaint(); 230 237 231 238 super.closeUI(); cFileSystemPane.java
.. .. @@ -62,10 +62,10 @@ 62 62 63 63 cGridBag fileCommsnds = new cGridBag(); 64 64 65 - fileCommsnds.add(refreshButton = new JButton("Refresh")); //, aConstraints);66 - refreshButton.setToolTipText("Refresh entire tree");67 65 fileCommsnds.add(loadButton = new JButton("Load")); //, aConstraints); 68 66 loadButton.setToolTipText("Load selected file(s)"); 67 + fileCommsnds.add(refreshButton = new JButton("Refresh")); //, aConstraints);68 + refreshButton.setToolTipText("Refresh entire tree");69 69 70 70 refreshButton.addActionListener(this); 71 71 loadButton.addActionListener(this); cJ3D.java
.. .. @@ -360,13 +360,13 @@ 360 360 toParent[3][3] = m.m33; 361 361 } 362 362 363 + Matrix4d m = new Matrix4d();364 +363 365 Object3D Read(TransformGroup g) 364 366 { 365 367 Object3D c = new Object3D(GetName(g)); // g.getClass().getName()); 366 368 367 369 Transform3D t = new Transform3D(); 368 -369 - Matrix4d m = new Matrix4d();370 370 371 371 g.getTransform(t); 372 372 .. .. @@ -375,22 +375,18 @@ 375 375 c.toParent = LA.newMatrix(); 376 376 c.fromParent = LA.newMatrix(); 377 377 378 - c.toParent[0][0] = m.m00;379 - c.toParent[0][1] = m.m10;380 - c.toParent[0][2] = m.m20;381 - c.toParent[0][3] = m.m30;382 - c.toParent[1][0] = m.m01;383 - c.toParent[1][1] = m.m11;384 - c.toParent[1][2] = m.m21;385 - c.toParent[1][3] = m.m31;386 - c.toParent[2][0] = m.m02;387 - c.toParent[2][1] = m.m12;388 - c.toParent[2][2] = m.m22;389 - c.toParent[2][3] = m.m32;390 - c.toParent[3][0] = m.m03;391 - c.toParent[3][1] = m.m13;392 - c.toParent[3][2] = m.m23;393 - c.toParent[3][3] = m.m33;378 + if (m.m00 != 0 || m.m10 != 0 || m.m20 != 0 || m.m30 != 0 ||379 + m.m01 != 0 || m.m11 != 0 || m.m21 != 0 || m.m31 != 0 ||380 + m.m02 != 0 || m.m12 != 0 || m.m22 != 0 || m.m32 != 0 ||381 + m.m03 != 0 || m.m13 != 0 || m.m23 != 0 /*|| m.m33 != 0 */)382 + {383 + SetMatrix(c, m);384 + }385 + else386 + {387 + System.err.println("Found zero scale matrix. Hide the object instead.");388 + c.count = 1;389 + }394 390 395 391 // ReadNode(c, g); 396 392 LA.matInvert(c.toParent, c.fromParent); .. .. @@ -402,6 +398,26 @@ 402 398 403 399 return c; 404 400 } 401 +402 + private void SetMatrix(Object3D c, Matrix4d m)403 + {404 + c.toParent[0][0] = m.m00;405 + c.toParent[0][1] = m.m10;406 + c.toParent[0][2] = m.m20;407 + c.toParent[0][3] = m.m30;408 + c.toParent[1][0] = m.m01;409 + c.toParent[1][1] = m.m11;410 + c.toParent[1][2] = m.m21;411 + c.toParent[1][3] = m.m31;412 + c.toParent[2][0] = m.m02;413 + c.toParent[2][1] = m.m12;414 + c.toParent[2][2] = m.m22;415 + c.toParent[2][3] = m.m32;416 + c.toParent[3][0] = m.m03;417 + c.toParent[3][1] = m.m13;418 + c.toParent[3][2] = m.m23;419 + c.toParent[3][3] = m.m33;420 + }405 421 406 422 Object3D Read(Scene s, String fn) 407 423 {