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.
---
CameraPane.java | 42 +++++++++++---------
Globals.java | 1
cRadio.java | 3 +
GroupEditor.java | 30 ++++++++++++++
Mocap.java | 2
Object3D.java | 7 ++-
Grafreed.java | 2
7 files changed, 62 insertions(+), 25 deletions(-)
diff --git a/CameraPane.java b/CameraPane.java
index 76ad7dc..7afdef6 100644
--- a/CameraPane.java
+++ b/CameraPane.java
@@ -326,7 +326,7 @@
cStatic.objectstack[materialdepth++] = obj;
//System.out.println("material " + material);
//Applet3D.tracein(this, selected);
- display.vector2buffer = obj.projectedVertices;
+ //display.vector2buffer = obj.projectedVertices;
if (obj instanceof Camera)
{
display.options1[0] = material.shift;
@@ -358,7 +358,7 @@
/**/
} else
{
- DrawMaterial(material, selected);
+ DrawMaterial(material, selected, obj.projectedVertices);
}
} else
{
@@ -382,8 +382,8 @@
cStatic.objectstack[materialdepth++] = obj;
//System.out.println("material " + material);
//Applet3D.tracein("selected ", selected);
- display.vector2buffer = obj.projectedVertices;
- display.DrawMaterial(material, selected);
+ //display.vector2buffer = obj.projectedVertices;
+ display.DrawMaterial(material, selected, obj.projectedVertices);
}
}
@@ -400,8 +400,8 @@
materialdepth -= 1;
if (materialdepth > 0)
{
- display.vector2buffer = cStatic.objectstack[materialdepth - 1].projectedVertices;
- display.DrawMaterial(materialstack[materialdepth - 1], selectedstack[materialdepth - 1]);
+ //display.vector2buffer = cStatic.objectstack[materialdepth - 1].projectedVertices;
+ display.DrawMaterial(materialstack[materialdepth - 1], selectedstack[materialdepth - 1], cStatic.objectstack[materialdepth - 1].projectedVertices);
}
//Applet3D.traceout("selected ", (stackdepth>0)?selectedstack[stackdepth-1]:"???");
} else if (selected && CameraPane.flash && obj.GetMaterial() != null)
@@ -421,8 +421,8 @@
materialdepth -= 1;
if (materialdepth > 0)
{
- display.vector2buffer = cStatic.objectstack[materialdepth - 1].projectedVertices;
- display.DrawMaterial(materialstack[materialdepth - 1], selectedstack[materialdepth - 1]);
+ //display.vector2buffer = cStatic.objectstack[materialdepth - 1].projectedVertices;
+ display.DrawMaterial(materialstack[materialdepth - 1], selectedstack[materialdepth - 1], cStatic.objectstack[materialdepth - 1].projectedVertices);
}
//Applet3D.traceout("selected ", (stackdepth>0)?selectedstack[stackdepth-1]:"???");
//else
@@ -1610,7 +1610,7 @@
// gl.glMaterialfv(gl.GL_BACK, gl.GL_DIFFUSE, colorV, 0);
}
- void DrawMaterial(cMaterial material, boolean selected)
+ void DrawMaterial(cMaterial material, boolean selected, Object3D.cVector2[] others)
{
CameraPane display = this;
//new Exception().printStackTrace();
@@ -1645,7 +1645,7 @@
colorV[0] = display.modelParams0[0] * material.diffuse;
colorV[1] = display.modelParams0[1] * material.diffuse;
colorV[2] = display.modelParams0[2] * material.diffuse;
- colorV[3] = material.opacity;
+ colorV[3] = 1; // material.opacity;
gl.glColor4f(colorV[0], colorV[1], colorV[2], material.opacity);
//System.out.println("Opacity = " + opacity);
@@ -1753,9 +1753,9 @@
display.modelParams7[2] = 0;
display.modelParams7[3] = 0;
- display.modelParams6[0] = 100; // criss de bug de bump
+ //display.modelParams6[0] = 100; // criss de bug de bump
- Object3D.cVector2[] extparams = display.vector2buffer;
+ Object3D.cVector2[] extparams = others; // display.vector2buffer;
if (extparams != null && extparams.length > 0 && extparams[0] != null)
{
display.modelParams6[0] = extparams[0].x / 1000.0f; // bump
@@ -10548,7 +10548,8 @@
ambientOcclusion = false;
}
- if (Globals.lighttouched && DrawMode() == DEFAULT) // && !lightMode) // && !FROZEN)
+ if (//Globals.lighttouched &&
+ DrawMode() == DEFAULT) // && !lightMode) // && !FROZEN)
{
//if (RENDERSHADOW) // ?
if (!IsFrozen())
@@ -13315,7 +13316,8 @@
/*static*/ float[] modelParams5 = new float[]{0, 0, 0, 0}; // texture, opacity, fakedepth, shadowbias
/*static*/ float[] modelParams6 = new float[]{0, 0, 0, 0}; // bump, noise, borderfade, fog punchthrough
/*static*/ float[] modelParams7 = new float[]{0, 0, 0, 0}; // noise power, opacity power
- Object3D.cVector2[] vector2buffer;
+
+ //Object3D.cVector2[] vector2buffer;
// IN : ndotl, ndoth, xxx, NdotL //, snininess, lightarea
// OUT : diff, spec
@@ -14539,7 +14541,9 @@
ci.camera = renderCamera;
if (!isRenderer)
{
- if (object.editWindow.copy.doEditClick(ci, 0))
+ ObjEditor editWindow = object.editWindow;
+ Object3D copy = editWindow.copy;
+ if (copy.doEditClick(ci, 0))
{
setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
} else
@@ -16385,16 +16389,16 @@
cStatic.objectstack[materialdepth++] = checker;
//System.out.println("material " + material);
//Applet3D.tracein(this, selected);
- vector2buffer = checker.projectedVertices;
+ //vector2buffer = checker.projectedVertices;
//checker.GetMaterial().Draw(this, false); // true);
- DrawMaterial(checker.GetMaterial(), false); // true);
+ DrawMaterial(checker.GetMaterial(), false, checker.projectedVertices); // true);
materialdepth -= 1;
if (materialdepth > 0)
{
- vector2buffer = cStatic.objectstack[materialdepth - 1].projectedVertices;
- DrawMaterial(materialstack[materialdepth - 1], selectedstack[materialdepth - 1]);
+ //vector2buffer = cStatic.objectstack[materialdepth - 1].projectedVertices;
+ DrawMaterial(materialstack[materialdepth - 1], selectedstack[materialdepth - 1], cStatic.objectstack[materialdepth - 1].projectedVertices);
}
//checker.GetMaterial().opacity = 1f;
////checker.GetMaterial().ambient = 1f;
diff --git a/Globals.java b/Globals.java
index 3cb946a..3489016 100644
--- a/Globals.java
+++ b/Globals.java
@@ -7,6 +7,7 @@
static iCameraPane theRenderer;
private static boolean LIVE = false;
+ public static boolean COMPUTESHADOWWHENLIVE = true;
public static boolean RENDERSHADOW = true;
public static boolean MOUSEDRAGGED = false;
diff --git a/Grafreed.java b/Grafreed.java
index f05fa38..7007edf 100644
--- a/Grafreed.java
+++ b/Grafreed.java
@@ -876,7 +876,7 @@
static int depth = 0;
static java.util.Stack stack = new java.util.Stack();
static boolean traceoff = false; // true;
- static float[] colorV = new float[5];
+ static float[] colorV = new float[4]; // 5];
static void traceon()
{
diff --git a/GroupEditor.java b/GroupEditor.java
index 8646c14..33acfd4 100644
--- a/GroupEditor.java
+++ b/GroupEditor.java
@@ -808,11 +808,19 @@
// debugCB.addItemListener(this);
panel.add(oeilCB = new cCheckBox("Eye", CameraPane.OEIL)); //, constraints);
+ oeilCB.setToolTipText("Move camera when tracking target");
oeilCB.addItemListener(this);
+ panel.add(shadowCB = new cCheckBox("Shadow", Globals.COMPUTESHADOWWHENLIVE)); //, constraints);
+ shadowCB.setToolTipText("Compute shadows when live");
+ shadowCB.addItemListener(this);
+
+ if (Globals.ADVANCED)
+ {
panel.add(lookAtCB = new cCheckBox("Target", CameraPane.LOOKAT)); //, constraints);
lookAtCB.setToolTipText("Look-at target");
lookAtCB.addItemListener(this);
+ }
}
@@ -827,6 +835,14 @@
void EditObject(Object3D obj)
{
cRadio radioButton = new cRadio(obj.name);
+
+ // Patch to avoid bug with transparency.
+ radioButton.hadMaterial = obj.material != null;
+ if (!radioButton.hadMaterial)
+ {
+ obj.material = new cMaterial();
+ }
+
radioButton.SetObject(obj);
radioButton.layout = sevenButton;
radioButton.SetCamera(cameraView.renderCamera, false);
@@ -863,7 +879,9 @@
JCheckBox speakerCameraCB;
JCheckBox speakerFocusCB;
JCheckBox debugCB;
+
JCheckBox oeilCB;
+ JCheckBox shadowCB;
JCheckBox lookAtCB;
// static int COLOR = 1;
@@ -966,6 +984,10 @@
else if(e.getSource() == oeilCB)
{
cameraView.ToggleOeil();
+ }
+ else if(e.getSource() == shadowCB)
+ {
+ Globals.COMPUTESHADOWWHENLIVE ^= true;
}
else if(e.getSource() == lookAtCB)
{
@@ -3126,8 +3148,14 @@
for (Enumeration e = buttonGroup.getElements(); e.hasMoreElements();)
{
ab = (cRadio)e.nextElement();
- if(ab.getModel().isSelected() && ab.GetObject() != client)
+ if (ab.getModel().isSelected() && ab.GetObject() != client)
{
+ // Patch to avoid bug with transparency.
+ if (!ab.hadMaterial)
+ {
+ ab.object.material = null;
+ }
+
buttonGroup.remove(ab);
radioPanel.remove(ab);
diff --git a/Mocap.java b/Mocap.java
index a98d80c..438e46a 100644
--- a/Mocap.java
+++ b/Mocap.java
@@ -3915,7 +3915,7 @@
// return;
if (//!restarted && /*display.restartframe &&*/
- Globals.isLIVE() && live && (display.DrawMode() == iCameraPane.SHADOW || !Globals.RENDERSHADOW))
+ Globals.isLIVE() && live && (display.DrawMode() == iCameraPane.SHADOW || !Globals.RENDERSHADOW || !Globals.COMPUTESHADOWWHENLIVE))
{
//display.restartframe = false;
restarted = true;
diff --git a/Object3D.java b/Object3D.java
index a5ae9d9..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;
@@ -966,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;
}
@@ -5750,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)
{
@@ -5771,7 +5772,7 @@
if (!selectmode && //display.DrawMode() != display.SELECTION &&
//(touched || (bRep != null && bRep.displaylist <= 0)))
- (Globals.isLIVE() || touched && (bRep != null && bRep.displaylist <= 0)))
+ (Globals.isLIVE() && Globals.COMPUTESHADOWWHENLIVE || touched && (bRep != null && bRep.displaylist <= 0)))
{
Globals.lighttouched = true;
} // all panes...
diff --git a/cRadio.java b/cRadio.java
index 83d4fc2..1ab12b3 100644
--- a/cRadio.java
+++ b/cRadio.java
@@ -38,6 +38,9 @@
byte[] graphs[] = new byte[10000][];
int undoindex = 0;
+ // Patch to avoid bug with transparency.
+ boolean hadMaterial;
+
Object3D object;
Camera camera;
cButton layout;
--
Gitblit v1.6.2