From c67da2e5d8655704601d6d06e8bc60aabe212253 Mon Sep 17 00:00:00 2001 From: Normand Briere <nbriere@noware.ca> Date: Sun, 23 Jun 2019 21:49:12 -0400 Subject: [PATCH] Compute shadow when live option. --- Object3D.java | 152 ++++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 138 insertions(+), 14 deletions(-) diff --git a/Object3D.java b/Object3D.java index 04e109f..45bb2a6 100644 --- a/Object3D.java +++ b/Object3D.java @@ -881,7 +881,7 @@ if (marked && Globals.isLIVE() && live && //TEMP21aug2018 - (Globals.DrawMode() == iCameraPane.SHADOW || !Globals.RENDERSHADOW) && + (Globals.DrawMode() == iCameraPane.SHADOW || !Globals.RENDERSHADOW || !Globals.COMPUTESHADOWWHENLIVE) && currentframe != Globals.framecount) { currentframe = Globals.framecount; @@ -893,7 +893,8 @@ boolean changedir = random && Math.random() < 0.01; // && !link2master; - if (transformcount*factor > maxcount || (step == 1 && changedir)) + if (transformcount*factor >= maxcount && (rewind || random) || + (step == 1 && changedir)) { countdown = 1; delay = speedup?8:1; @@ -965,6 +966,7 @@ if (material == null || material.multiply) return true; + // Transparent objects are dynamic because we have to sort the triangles. return material.opacity > 0.99; } @@ -2386,6 +2388,10 @@ } */ } + else + { + //((ObjEditor)editWindow).SetupUI2(null); + } } void createEditWindow(GroupEditor callee, boolean newWindow) //, boolean root) @@ -3503,7 +3509,8 @@ if (blockloop) return; - if (marked || (bRep != null && material != null)) // borderline... + if (//marked || // does not make sense + (bRep != null || material != null)) // borderline... live = h; for (int i = 0; i < Size(); i++) @@ -3524,7 +3531,8 @@ return; //if (bRep != null) - if (marked || (bRep != null && material != null)) // borderline... + if (//marked || // does not make sense + (bRep != null || material != null)) // borderline... link2master = h; for (int i = 0; i < Size(); i++) @@ -3544,7 +3552,8 @@ if (blockloop) return; - if (marked || (bRep != null && material != null)) // borderline... + if (//marked || // does not make sense + (bRep != null || material != null)) // borderline... hide = h; for (int i = 0; i < Size(); i++) @@ -3564,7 +3573,7 @@ if (blockloop) return; - if (bRep != null && material != null) // borderline... + if (bRep != null || material != null) // borderline... marked = h; for (int i = 0; i < Size(); i++) @@ -3574,6 +3583,46 @@ continue; blockloop = true; child.MarkLeaves(h); + blockloop = false; + // release(i); + } + } + + void RewindLeaves(boolean h) + { + if (blockloop) + return; + + if (bRep != null || material != null) // borderline... + rewind = h; + + for (int i = 0; i < Size(); i++) + { + Object3D child = (Object3D) get(i); // reserve(i); + if (child == null) + continue; + blockloop = true; + child.RewindLeaves(h); + blockloop = false; + // release(i); + } + } + + void RandomLeaves(boolean h) + { + if (blockloop) + return; + + if (bRep != null || material != null) // borderline... + random = h; + + for (int i = 0; i < Size(); i++) + { + Object3D child = (Object3D) get(i); // reserve(i); + if (child == null) + continue; + blockloop = true; + child.RandomLeaves(h); blockloop = false; // release(i); } @@ -4347,6 +4396,55 @@ { blockloop = true; get(i).RepairShadow(); + blockloop = false; + } + } + + void RepairSOV() + { + if (blockloop) + return; + + String texname = this.GetPigmentTexture(); + + if (texname.startsWith("sov")) + { + String[] s = texname.split("/"); + + String[] sname = s[1].split("Color.pn"); + + texname = sname[0]; + + if (sname.length > 1) + { + texname += "Color.jpg"; + } + + this.SetPigmentTexture("sov/" + texname); + } + + texname = this.GetBumpTexture(); + + if (texname.startsWith("sov")) + { + String[] s = texname.split("/"); + + String[] sname = s[1].split("Bump.pn"); + + texname = sname[0]; + + if (sname.length > 1) + { + texname += "Bump.jpg"; + } + + this.SetBumpTexture("sov/" + texname); + } + + for (int i=0; i<Size(); i++) + { + blockloop = true; + get(i).RepairSOV(); blockloop = false; } } @@ -5653,7 +5751,7 @@ support = support; //boolean usecalllists = IsStatic() && GetBRep() != null && (!CameraPane.SUPPORT || support == null || !link2master); // !(this instanceof cSpring) && !(this instanceof BezierPatch); - boolean usecalllists = IsLive(); // IsStatic() && GetBRep() != null && (!CameraPane.SUPPORT || support == null) && !link2master; // !(this instanceof cSpring) && !(this instanceof BezierPatch); + boolean usecalllists = !IsLive(); // IsStatic() && GetBRep() != null && (!CameraPane.SUPPORT || support == null) && !link2master; // !(this instanceof cSpring) && !(this instanceof BezierPatch); if (!usecalllists && bRep != null && bRep.displaylist > 0) { @@ -5673,10 +5771,12 @@ boolean selectmode = display.DrawMode() == display.SELECTION || display.IsDebugSelection(); if (!selectmode && //display.DrawMode() != display.SELECTION && - (touched || (bRep != null && bRep.displaylist <= 0))) + //(touched || (bRep != null && bRep.displaylist <= 0))) + (Globals.isLIVE() && Globals.COMPUTESHADOWWHENLIVE || touched && (bRep != null && bRep.displaylist <= 0))) { Globals.lighttouched = true; } // all panes... + //if (usecalllists && display.DrawMode() != display.SELECTION && display.DrawMode() != display.SHADOW && if (bRep != null && usecalllists && !selectmode && // june 2013 display.DrawMode() != display.SHADOW && (touched || (bRep != null && bRep.displaylist <= 0))) @@ -5844,16 +5944,27 @@ tex = GetTextures(); } - boolean failed = false; + boolean failedPigment = false; + boolean failedBump = false; try { - display.BindTextures(tex, texres); + display.BindPigmentTexture(tex, texres); } catch (Exception e) { System.err.println("FAILED: " + this); - failed = true; + failedPigment = true; + } + + try + { + display.BindBumpTexture(tex, texres); + } + catch (Exception e) + { + //System.err.println("FAILED: " + this); + failedBump = true; } if (!compiled) @@ -5876,8 +5987,11 @@ } } - if (!failed) - display.ReleaseTextures(tex); + if (!failedBump) + display.ReleaseBumpTexture(tex); + + if (!failedPigment) + display.ReleasePigmentTexture(tex); display.PopMaterial(this, selected); } @@ -6250,6 +6364,11 @@ // dec 2012 new Exception().printStackTrace(); return; + } + + if (dontselect) + { + //bRep.GenerateNormalsMINE(); } display.DrawGeometry(bRep, flipV, selectmode); @@ -7450,7 +7569,8 @@ } // vScale, 1); else { - LA.matScale(toParent, 1, totalScale, totalScale); + // EXCEPTION! + LA.matScale(toParent, totalScale, totalScale, totalScale); } // vScale, 1); break; @@ -7686,6 +7806,10 @@ editWindow = null; } // ? } + else + { + //editWindow.closeUI(); + } } boolean root; // patch for edit windows -- Gitblit v1.6.2