From 3c4c16e0a4ca3949a7a37a24607df7f89abfe7ea Mon Sep 17 00:00:00 2001 From: Normand Briere <nbriere@noware.ca> Date: Mon, 22 Apr 2019 16:52:58 -0400 Subject: [PATCH] Refactoring phase 3 --- ObjEditor.java | 10 CameraScroller.java | 6 Merge.java | 4 PointFlow.java | 201 -------------- CSG.java | 4 Mocap.java | 2 Composite.java | 6 iCameraPane.java | 11 BoundaryRep.java | 88 ----- cLinker.java | 2 CameraPane.java | 319 ++++++++++++++++++++++ Globals.java | 18 Object3D.java | 159 +++++----- 13 files changed, 438 insertions(+), 392 deletions(-) diff --git a/BoundaryRep.java b/BoundaryRep.java index 655d595..729177a 100644 --- a/BoundaryRep.java +++ b/BoundaryRep.java @@ -15,7 +15,7 @@ { this(0, 0); } - + void SaveSupports() { transientsupport = support; @@ -4893,7 +4893,7 @@ return verticesCopy; } - void PreprocessOcclusion(CameraPane cp, double[][] transform) + void PreprocessOcclusion(iCameraPane cp, double[][] transform) { if (//!trimmed || AOdone) @@ -4902,80 +4902,7 @@ return; } - Camera keep = cp.renderCamera; - cp.renderCamera = localcamera; - - if (trimmed) - { - float[] colors = new float[positions.length / 3]; - - int i3 = 0; - for (int i = 0; i < positions.length / 3; i++, i3 += 3) - { - if (normals[i3] == 0 && normals[i3+1] == 0 && normals[i3+2] == 0) - continue; - - from.set(positions[i3], positions[i3 + 1], positions[i3 + 2]); - to.set(positions[i3] + normals[i3], - positions[i3 + 1] + normals[i3 + 1], - positions[i3 + 2] + normals[i3 + 2]); - LA.xformPos(from, transform, from); - LA.xformPos(to, transform, to); // RIGID ONLY - localcamera.setAim(from, to); - - CameraPane.occlusionbuffer.display(); - - if (CameraPane.DEBUG_OCCLUSION) - cp.display(); // debug - - colors[i] = cp.vertexOcclusion.r; - //colors[i3 + 1] = cp.vertexOcclusion.g; - //colors[i3 + 2] = cp.vertexOcclusion.b; - - if ((i % 100) == 0 && i != 0) - { - CameraPane.theRenderer.setCursor(java.awt.Cursor.getPredefinedCursor(java.awt.Cursor.WAIT_CURSOR)); - //System.out.println("Color = " + cp.vertexOcclusion.r + ", " + cp.vertexOcclusion.g + ", " + cp.vertexOcclusion.b + "; " + (int)(100.0*i/(positions.length/3)) + "% done"); - System.out.println((int) (100.0 * i / (positions.length / 3)) + "% (" + i + " of " + (positions.length / 3) + ")"); - } - } - - this.colors = colors; - } - else - { - for (int i = 0; i < VertexCount(); i++) - { - Vertex v = GetVertex(i); - - if (v.norm == null || v.norm.x == 0 && v.norm.y == 0 && v.norm.z == 0) - continue; - - from.set(v.x, v.y, v.z); - to.set(v.x+v.norm.x, v.y+v.norm.y, v.z+v.norm.z); - LA.xformPos(from, transform, from); - LA.xformPos(to, transform, to); // RIGID ONLY - localcamera.setAim(from, to); - - CameraPane.occlusionbuffer.display(); - - if (CameraPane.DEBUG_OCCLUSION) - cp.display(); // debug - - v.AO = cp.vertexOcclusion.r; - - if ((i % 100) == 0 && i != 0) - { - CameraPane.theRenderer.setCursor(java.awt.Cursor.getPredefinedCursor(java.awt.Cursor.WAIT_CURSOR)); - //System.out.println("Color = " + cp.vertexOcclusion.r + ", " + cp.vertexOcclusion.g + ", " + cp.vertexOcclusion.b + "; " + (int)(100.0*i/(positions.length/3)) + "% done"); - System.out.println((int) (100.0 * i / VertexCount()) + "% (" + i + " of " + VertexCount() + ")"); - } - } - } - - //System.out.println("done."); - - cp.renderCamera = keep; + cp.PrepOcclusion(this, transform); AOdone = true; } @@ -8354,9 +8281,6 @@ return "trim = " + trimmed + "; stripped = " + stripified + "; colors = " + colors + "; faces = " + (faces!=null?faces.size():null) + "; triangles = " + (triangles!=null?triangles.length:null) + "; indices = " + indices; } - static Camera localcamera = new Camera(); - static cVector from = new cVector(); - static cVector to = new cVector(); boolean trimmed = false; boolean stripified = false; transient boolean AOdone = false; @@ -8364,8 +8288,10 @@ /*transient*/ int maxIndexV = 0; /*transient*/ int bufV, bufF; // Raw version - private float[] positions; - private float[] normals; + //private + float[] positions; + //private + float[] normals; float[] colors; private float[] uvmap; private int[] triangles; diff --git a/CSG.java b/CSG.java index 44c5995..cefd400 100644 --- a/CSG.java +++ b/CSG.java @@ -132,7 +132,7 @@ } /**/ - void draw(CameraPane display, Object3D /*Composite*/ root, boolean selected, boolean blocked) + void draw(iCameraPane display, Object3D /*Composite*/ root, boolean selected, boolean blocked) { if (csgType == UNION || !link2master) // || csgType == MERGE) { @@ -154,7 +154,7 @@ } /**/ - void PreprocessOcclusion(CameraPane cp) + void PreprocessOcclusion(iCameraPane cp) { if (csgType == UNION) // || csgType == MERGE) { diff --git a/CameraPane.java b/CameraPane.java index c4bdcc2..fc57173 100644 --- a/CameraPane.java +++ b/CameraPane.java @@ -149,8 +149,9 @@ defaultcaps.setAccumBlueBits(16); defaultcaps.setAccumAlphaBits(16); } + static CameraPane theRenderer; - + void SetAsGLRenderer(boolean b) { isRenderer = b; @@ -236,9 +237,14 @@ return this.ambientOcclusion; } + public boolean IsDebugSelection() + { + return DEBUG_SELECTION; + } + public boolean IsFrozen() { - boolean selectmode = this.DrawMode() == SELECTION || CameraPane.DEBUG_SELECTION; + boolean selectmode = this.DrawMode() == SELECTION || this.IsDebugSelection(); return !selectmode && cameracount == 0; // != 0; } @@ -259,9 +265,19 @@ return lightCamera; } + public Camera ManipCamera() + { + return manipCamera; + } + public Camera RenderCamera() { return renderCamera; + } + + public Camera[] Cameras() + { + return cameras; } public void PushMaterial(Object3D obj, boolean selected) @@ -408,7 +424,7 @@ javax.media.opengl.GL gl = display.GetGL(); - boolean selectmode = display.DrawMode() == display.SELECTION || CameraPane.DEBUG_SELECTION; + boolean selectmode = display.DrawMode() == display.SELECTION || display.IsDebugSelection(); //System.out.println("p = " + pv + "; q = " + qv + "; r = " + rv); if (!selectmode) // display.drawMode != display.SELECTION) // && display.drawMode != display.SHADOW) // (attributes & FILL) != 0) @@ -760,6 +776,291 @@ //// tris.postdraw(this); } + static Camera localcamera = new Camera(); + static cVector from = new cVector(); + static cVector to = new cVector(); + + public void PrepOcclusion(BoundaryRep br, double[][] transform) + { + CameraPane cp = this; + + Camera keep = cp.RenderCamera(); + cp.renderCamera = localcamera; + + if (br.trimmed) + { + float[] colors = new float[br.positions.length / 3]; + + int i3 = 0; + for (int i = 0; i < br.positions.length / 3; i++, i3 += 3) + { + if (br.normals[i3] == 0 && br.normals[i3+1] == 0 && br.normals[i3+2] == 0) + continue; + + from.set(br.positions[i3], br.positions[i3 + 1], br.positions[i3 + 2]); + to.set(br.positions[i3] + br.normals[i3], + br.positions[i3 + 1] + br.normals[i3 + 1], + br.positions[i3 + 2] + br.normals[i3 + 2]); + LA.xformPos(from, transform, from); + LA.xformPos(to, transform, to); // RIGID ONLY + localcamera.setAim(from, to); + + CameraPane.occlusionbuffer.display(); + + if (CameraPane.DEBUG_OCCLUSION) + cp.display(); // debug + + colors[i] = cp.vertexOcclusion.r; + //colors[i3 + 1] = cp.vertexOcclusion.g; + //colors[i3 + 2] = cp.vertexOcclusion.b; + + if ((i % 100) == 0 && i != 0) + { + CameraPane.theRenderer.setCursor(java.awt.Cursor.getPredefinedCursor(java.awt.Cursor.WAIT_CURSOR)); + //System.out.println("Color = " + cp.vertexOcclusion.r + ", " + cp.vertexOcclusion.g + ", " + cp.vertexOcclusion.b + "; " + (int)(100.0*i/(positions.length/3)) + "% done"); + System.out.println((int) (100.0 * i / (br.positions.length / 3)) + "% (" + i + " of " + (br.positions.length / 3) + ")"); + } + } + + br.colors = colors; + } + else + { + for (int i = 0; i < br.VertexCount(); i++) + { + Vertex v = br.GetVertex(i); + + if (v.norm == null || v.norm.x == 0 && v.norm.y == 0 && v.norm.z == 0) + continue; + + from.set(v.x, v.y, v.z); + to.set(v.x+v.norm.x, v.y+v.norm.y, v.z+v.norm.z); + LA.xformPos(from, transform, from); + LA.xformPos(to, transform, to); // RIGID ONLY + localcamera.setAim(from, to); + + CameraPane.occlusionbuffer.display(); + + if (CameraPane.DEBUG_OCCLUSION) + cp.display(); // debug + + v.AO = cp.vertexOcclusion.r; + + if ((i % 100) == 0 && i != 0) + { + CameraPane.theRenderer.setCursor(java.awt.Cursor.getPredefinedCursor(java.awt.Cursor.WAIT_CURSOR)); + //System.out.println("Color = " + cp.vertexOcclusion.r + ", " + cp.vertexOcclusion.g + ", " + cp.vertexOcclusion.b + "; " + (int)(100.0*i/(positions.length/3)) + "% done"); + System.out.println((int) (100.0 * i / br.VertexCount()) + "% (" + i + " of " + br.VertexCount() + ")"); + } + } + } + + //System.out.println("done."); + + cp.renderCamera = keep; + } + + void DrawPointFLow(PointFlow pointFlow, Object3D /*Composite*/ root, boolean selected, boolean blocked) + { + CameraPane display = this; + pointFlow.CreateHT(); + + float r = display.modelParams0[0]; + float g = display.modelParams0[1]; + float b = display.modelParams0[2]; + float opacity = display.modelParams5[1]; + + //final GL gl = GLU.getCurrentGL(); + GL gl = display.GetGL(); // getGL(); + + int s = pointFlow.points.size(); + + boolean cf = gl.glIsEnabled(gl.GL_CULL_FACE); + gl.glEnable(gl.GL_CULL_FACE); + + for (int i=s; --i>=0;) + //for (int i=0; i<s; i++) + { + cVector v = pointFlow.points.get(i); + + double mindist = Double.MAX_VALUE; + + double size = pointFlow.minimumSize; + + double distancenext = 0; + + if (i > 0) + { + cVector w = pointFlow.points.get(i-1); + + double dist = w.distance(v); + + distancenext = dist; + + if (mindist > dist) + { + mindist = dist; + size = mindist*pointFlow.resizefactor; + } + } + + if (i < s-1) + { + cVector w = pointFlow.points.get(i+1); + + double dist = w.distance(v); + + if (mindist > dist) + { + mindist = dist; + size = mindist*pointFlow.resizefactor; + } + } + + if (size < pointFlow.minimumSize) + size = pointFlow.minimumSize; + if (size > pointFlow.maximumSize) + size = pointFlow.maximumSize; + + double tx = v.x; + double ty = v.y; + double tz = v.z; + + // if (tx == 0 && ty == 0 && tz == 0) + // continue; + + gl.glMatrixMode(gl.GL_TEXTURE); + gl.glPushMatrix(); + pointFlow.texmat[12] = pointFlow.texmat[13] = pointFlow.texmat[14] = i; + + gl.glMultMatrixf(pointFlow.texmat, 0); + + gl.glMatrixMode(gl.GL_MODELVIEW); + gl.glPushMatrix(); + + gl.glTranslated(tx,ty,tz); + + gl.glScaled(size,size,size); + +// float cr = colorBuf.get(index4); +// float cg = colorBuf.get(index4+1); +// float cb = colorBuf.get(index4+2); +// float ca = colorBuf.get(index4+3); +// +// display.modelParams0[0] = r * cr; +// display.modelParams0[1] = g * cg; +// display.modelParams0[2] = b * cb; +// +// display.modelParams5[1] = opacity * ca; +// +// gl.glProgramEnvParameter4fvARB(gl.GL_FRAGMENT_PROGRAM_ARB, 0, display.modelParams0, 0); +// gl.glProgramEnvParameter4fvARB(gl.GL_FRAGMENT_PROGRAM_ARB, 5, display.modelParams5, 0); +// +// RandomNode.globalseed = (int)sizeBuf.get(index3+2); // i; +// RandomNode.globalseed2 = RandomNode.globalseed; +// +//// gl.glColor4f(cr,cg,cb,ca); +// // gl.glScalef(1024/16,1024/16,1024/16); + pointFlow.geo.Draw/*Node*/(display,null,selected, blocked); + + gl.glPopMatrix(); + + double step = size/4; // + + if (i == 0 || size == 0 || distancenext > 8*size || distancenext < step) + continue; + + int nbsteps = (int)(distancenext/step); + + step = distancenext/nbsteps; + + cVector next = pointFlow.points.get(i-1); + + tmp.set(next); + tmp.sub(v); + tmp.normalize(); + tmp.mul(step); + + // calculate next size + mindist = Double.MAX_VALUE; + + double nextsize = pointFlow.minimumSize; + + if (i > 1) + { + cVector w = pointFlow.points.get(i-2); + + double dist = w.distance(next); + + if (mindist > dist) + { + mindist = dist; + nextsize = mindist*pointFlow.resizefactor; + } + } + + double dist = v.distance(next); + + if (mindist > dist) + { + mindist = dist; + nextsize = mindist*pointFlow.resizefactor; + } + + if (nextsize < pointFlow.minimumSize) + nextsize = pointFlow.minimumSize; + if (nextsize > pointFlow.maximumSize) + nextsize = pointFlow.maximumSize; + // + + double count = 0; + + while (distancenext > 0.000000001) // step + { + gl.glPushMatrix(); + + gl.glTranslated(tx + tmp.x*count, ty + tmp.y*count, tz + tmp.z*count); + + double K = count/nbsteps; + + double intersize = K*nextsize + (1-K)*size; + + gl.glScaled(intersize,intersize,intersize); + + pointFlow.geo.Draw/*Node*/(display,null,selected,blocked); + + count++; + + distancenext -= step; + + gl.glPopMatrix(); + } + + if (count != nbsteps) + assert(count == nbsteps); + + // gl.glScalef(16.0f/1024,16.0f/1024,16.0f/1024); + //gl.glTranslatef(-tx,-ty,-tz); + + gl.glMatrixMode(gl.GL_TEXTURE); + gl.glPopMatrix(); + } + + if (!cf) + gl.glDisable(gl.GL_CULL_FACE); + +// display.modelParams0[0] = r; +// display.modelParams0[1] = g; +// display.modelParams0[2] = b; +// +// display.modelParams5[1] = opacity; +// +// gl.glProgramEnvParameter4fvARB(gl.GL_FRAGMENT_PROGRAM_ARB, 0, display.modelParams0, 0); +// gl.glProgramEnvParameter4fvARB(gl.GL_FRAGMENT_PROGRAM_ARB, 5, display.modelParams5, 0); + + gl.glMatrixMode(gl.GL_MODELVIEW); + } + /// INTERFACE void SetColor(Object3D obj, Vertex p0) @@ -10340,7 +10641,7 @@ fragmentMode |= (lightslot - 64) << 2; // 1; // first bit is available for aniso //System.out.println("fragmentMode = " + fragmentMode); - if (DrawMode() == DEFAULT || DrawMode() == SELECTION || DEBUG_SELECTION) + if (DrawMode() == DEFAULT || DrawMode() == SELECTION || IsDebugSelection()) { /* if (CULLFACE || (ambientOcclusion && OCCLUSION_CULLING)) @@ -10641,7 +10942,7 @@ callist = gl.glGenLists(1); } - boolean selectmode = DrawMode() == SELECTION || CameraPane.DEBUG_SELECTION; + boolean selectmode = DrawMode() == SELECTION || IsDebugSelection(); boolean active = !selectmode; // DrawMode() != SELECTION; // mouseDown; @@ -13115,6 +13416,11 @@ cVector tmp = new cVector(); cVector tmp2 = new cVector(); boolean isMoving; + + public cVector TargetLookAt() + { + return targetLookAt; + } class PingThread extends Thread { @@ -15966,7 +16272,6 @@ class AntialiasBuffer implements GLEventListener { - CameraPane parent = null; AntialiasBuffer(CameraPane p) @@ -16359,7 +16664,7 @@ } } - static void DrawPoints(CameraPane cpane) + static void DrawPoints(iCameraPane cpane) { for (int i=0; i<8; i++) // first and last are red { diff --git a/CameraScroller.java b/CameraScroller.java index 0a11119..e210980 100644 --- a/CameraScroller.java +++ b/CameraScroller.java @@ -15,10 +15,10 @@ //horizCenter = imageWidth / 2; //vertCenter = imageHeight / 2; setLayout(new BorderLayout()); - cameraPane = new CameraPane(null, null, false); +// TODO cameraPane = new CameraPane(null, null, false); //JScrollPane pain = new JScrollPane(cameraPane); /*add("North", (*/ caption = new Label("", 0); //); - add("Center", cameraPane); +// TODO add("Center", cameraPane); //add("East", vScroll = new Scrollbar(1)); //add("South", hScroll = new Scrollbar(0)); //add("Center", cameraPane = new CameraPane()); @@ -124,7 +124,7 @@ } */ - CameraPane cameraPane; +// TODO CameraPane cameraPane; //Scrollbar vScroll; //Scrollbar hScroll; Label caption; diff --git a/Composite.java b/Composite.java index 6156d60..210413e 100644 --- a/Composite.java +++ b/Composite.java @@ -837,7 +837,7 @@ } if ((//display.drawMode == CameraPane.SHADOW || - display.DrawMode() == CameraPane.SELECTION || CameraPane.DEBUG_SELECTION) && + display.DrawMode() == CameraPane.SELECTION || display.IsDebugSelection()) && //HasTransparency()) // SERIAL PATCH // if (viewCode == -1) @@ -855,7 +855,7 @@ cTexture tex = null; - boolean selectmode = display.DrawMode() == display.SELECTION || CameraPane.DEBUG_SELECTION; + boolean selectmode = display.DrawMode() == display.SELECTION || display.IsDebugSelection(); if (//display.drawMode != display.SHADOW && !selectmode // display.drawMode != display.SELECTION @@ -994,7 +994,7 @@ // } // } - void drawSelfOld(CameraPane display, Object3D /*Composite*/ root, boolean selected) + void drawSelfOld(iCameraPane display, Object3D /*Composite*/ root, boolean selected) { // if (count <= 0) // || display.IsFreezed()) // { diff --git a/Globals.java b/Globals.java index 0e4465b..070b46b 100644 --- a/Globals.java +++ b/Globals.java @@ -1,12 +1,20 @@ public class Globals { -static boolean CROWD = false; - static public int drawMode = iCameraPane.DEFAULT; // WARNING - static public boolean lighttouched = false; // WARNING - - static int framecount = 0; // general-purpose global count private static boolean LIVE = false; + + static boolean CROWD = false; + static public int drawMode = iCameraPane.DEFAULT; // WARNING + + static public boolean lighttouched = false; + static public boolean ANIMATION = false; + static public int imagecount = 0; + static public String filename; + + static public boolean fromscript = false; + static public boolean fullreset = false; + + static int framecount = 0; // general-purpose global count static boolean ONESTEP = false; // do LIVE once public static boolean isLIVE() diff --git a/Merge.java b/Merge.java index aa47522..138d4b1 100644 --- a/Merge.java +++ b/Merge.java @@ -396,9 +396,9 @@ } - public void drawCube(CameraPane display, float extent) + public void drawCube(iCameraPane display, float extent) { - GL gl = display.getGL(); + GL gl = display.GetGL(); extent = extent * 0.5f; diff --git a/Mocap.java b/Mocap.java index acb3fd0..9dc8a09 100644 --- a/Mocap.java +++ b/Mocap.java @@ -1519,7 +1519,7 @@ // mywave = currentwave++; // } // sound - cVector eye = CameraPane.theRenderer.eyeCamera.location; + cVector eye = CameraPane.theRenderer.EyeCamera().location; // if (sourcenode.parent.parent != null) // sourcenode.parent.parent.TransformToWorld(floor, tmp); diff --git a/ObjEditor.java b/ObjEditor.java index 884881a..9076e4e 100644 --- a/ObjEditor.java +++ b/ObjEditor.java @@ -3297,25 +3297,25 @@ void ToggleAnimation() { - if (!CameraPane.ANIMATION) + if (!Globals.ANIMATION) { FileDialog browser = new FileDialog(frame, "Save Animation As...", FileDialog.SAVE); browser.show(); String filename = browser.getFile(); if (filename != null && filename.length() > 0) { - CameraPane.filename = browser.getDirectory() + filename; + Globals.filename = browser.getDirectory() + filename; //CameraPane.framecount = 0; - CameraPane.imagecount = 0; + Globals.imagecount = 0; - CameraPane.ANIMATION ^= true; + Globals.ANIMATION ^= true; GrafreeD.wav.cursor = 0; GrafreeD.wav.loop = 0; } } else { - CameraPane.ANIMATION ^= true; + Globals.ANIMATION ^= true; } } diff --git a/Object3D.java b/Object3D.java index 18fd57e..fb14401 100644 --- a/Object3D.java +++ b/Object3D.java @@ -430,16 +430,16 @@ { Object3D copy = this; - Camera parentcam = CameraPane.theRenderer.manipCamera; + Camera parentcam = CameraPane.theRenderer.ManipCamera(); - if (CameraPane.theRenderer.manipCamera == CameraPane.theRenderer.cameras[0]) + if (CameraPane.theRenderer.ManipCamera() == CameraPane.theRenderer.Cameras()[0]) { - parentcam = CameraPane.theRenderer.cameras[1]; + parentcam = CameraPane.theRenderer.Cameras()[1]; } - if (CameraPane.theRenderer.manipCamera == CameraPane.theRenderer.cameras[1]) + if (CameraPane.theRenderer.ManipCamera() == CameraPane.theRenderer.Cameras()[1]) { - parentcam = CameraPane.theRenderer.cameras[0]; + parentcam = CameraPane.theRenderer.Cameras()[0]; } if (this == parentcam) @@ -447,7 +447,7 @@ //assert(this instanceof Camera); for (int count = parentcam.GetTransformCount(); --count>=0;) - LA.xformPos(CameraPane.theRenderer.targetLookAt, parentcam.toParent, CameraPane.theRenderer.targetLookAt); + LA.xformPos(CameraPane.theRenderer.TargetLookAt(), parentcam.toParent, CameraPane.theRenderer.TargetLookAt()); } copy.marked ^= true; @@ -467,7 +467,7 @@ //assert(this instanceof Camera); for (int count = parentcam.GetTransformCount(); --count>=0;) - LA.xformPos(CameraPane.theRenderer.targetLookAt, parentcam.fromParent, CameraPane.theRenderer.targetLookAt); + LA.xformPos(CameraPane.theRenderer.TargetLookAt(), parentcam.fromParent, CameraPane.theRenderer.TargetLookAt()); } copy.Touch(); // display list issue @@ -602,7 +602,7 @@ return; } - if (CameraPane.fromscript) + if (Globals.fromscript) { transformcount = 0; return; @@ -4854,7 +4854,7 @@ return globalTransform; } - void PreprocessOcclusion(CameraPane cp) + void PreprocessOcclusion(iCameraPane cp) { /* if (AOdone) @@ -5327,6 +5327,7 @@ && (Globals.DrawMode() == iCameraPane.SHADOW || Globals.CROWD); } + static boolean DEBUG_SELECTION = false; void Draw(iCameraPane display, Object3D /*Composite*/ root, boolean selected, boolean blocked) { @@ -5365,7 +5366,7 @@ } if ((//display.DrawMode() == CameraPane.SHADOW || - display.DrawMode() == CameraPane.SELECTION || CameraPane.DEBUG_SELECTION) && HasTransparency()) + display.DrawMode() == iCameraPane.SELECTION || display.IsDebugSelection()) && HasTransparency()) { return; } @@ -5406,7 +5407,7 @@ boolean compiled = false; - boolean selectmode = display.DrawMode() == display.SELECTION || CameraPane.DEBUG_SELECTION; + boolean selectmode = display.DrawMode() == display.SELECTION || display.IsDebugSelection(); if (!selectmode && //display.DrawMode() != display.SELECTION && (touched || (bRep != null && bRep.displaylist <= 0))) @@ -5484,9 +5485,9 @@ // frustum culling if (CameraPane.FRUSTUM && !blocked && !IsInfinite() && GetBRep() != null // && GetBRep().VertexCount() != 1260 // default grid - && display.DrawMode() != CameraPane.SELECTION) + && display.DrawMode() != iCameraPane.SELECTION) { - if (display.DrawMode() == CameraPane.SHADOW) + if (display.DrawMode() == iCameraPane.SHADOW) { if (!link2master // tricky to cull in shadow mode. && GetBRep().FrustumCull(this, gl, display.LightCamera(), true)) @@ -5533,7 +5534,7 @@ if (!culled) - if (display.DrawMode() == display.SELECTION || CameraPane.DEBUG_SELECTION) + if (display.DrawMode() == display.SELECTION || display.IsDebugSelection()) { if (GetBRep() != null) { @@ -5973,7 +5974,7 @@ { //throw new Error(); - boolean selectmode = display.DrawMode() == display.SELECTION || CameraPane.DEBUG_SELECTION; + boolean selectmode = display.DrawMode() == display.SELECTION || display.IsDebugSelection(); int[] strips = bRep.getRawIndices(); @@ -6993,83 +6994,83 @@ int spotw = spot.x + spot.width; int spoth = spot.y + spot.height; info.g.fillRect(spot.x, spot.y, spot.width, spot.height); - if (CameraPane.Xmin > spot.x) - { - CameraPane.Xmin = spot.x; - } - if (CameraPane.Xmax < spotw) - { - CameraPane.Xmax = spotw; - } - if (CameraPane.Ymin > spot.y) - { - CameraPane.Ymin = spot.y; - } - if (CameraPane.Ymax < spoth) - { - CameraPane.Ymax = spoth; - } +// if (CameraPane.Xmin > spot.x) +// { +// CameraPane.Xmin = spot.x; +// } +// if (CameraPane.Xmax < spotw) +// { +// CameraPane.Xmax = spotw; +// } +// if (CameraPane.Ymin > spot.y) +// { +// CameraPane.Ymin = spot.y; +// } +// if (CameraPane.Ymax < spoth) +// { +// CameraPane.Ymax = spoth; +// } spot.translate(32, 32); spotw = spot.x + spot.width; spoth = spot.y + spot.height; info.g.setColor(Color.blue); info.g.fillRect(spot.x, spot.y, spot.width, spot.height); - if (CameraPane.Xmin > spot.x) - { - CameraPane.Xmin = spot.x; - } - if (CameraPane.Xmax < spotw) - { - CameraPane.Xmax = spotw; - } - if (CameraPane.Ymin > spot.y) - { - CameraPane.Ymin = spot.y; - } - if (CameraPane.Ymax < spoth) - { - CameraPane.Ymax = spoth; - } +// if (CameraPane.Xmin > spot.x) +// { +// CameraPane.Xmin = spot.x; +// } +// if (CameraPane.Xmax < spotw) +// { +// CameraPane.Xmax = spotw; +// } +// if (CameraPane.Ymin > spot.y) +// { +// CameraPane.Ymin = spot.y; +// } +// if (CameraPane.Ymax < spoth) +// { +// CameraPane.Ymax = spoth; +// } info.g.drawLine(spotw, spoth, spotw, spoth - 15); info.g.drawLine(spotw, spoth, spotw - 15, spoth); spot.translate(0, -32); info.g.setColor(Color.green); info.g.fillRect(spot.x, spot.y, spot.width, spot.height); - if (CameraPane.Xmin > spot.x) - { - CameraPane.Xmin = spot.x; - } - if (CameraPane.Xmax < spotw) - { - CameraPane.Xmax = spotw; - } - if (CameraPane.Ymin > spot.y) - { - CameraPane.Ymin = spot.y; - } - if (CameraPane.Ymax < spoth) - { - CameraPane.Ymax = spoth; - } +// if (CameraPane.Xmin > spot.x) +// { +// CameraPane.Xmin = spot.x; +// } +// if (CameraPane.Xmax < spotw) +// { +// CameraPane.Xmax = spotw; +// } +// if (CameraPane.Ymin > spot.y) +// { +// CameraPane.Ymin = spot.y; +// } +// if (CameraPane.Ymax < spoth) +// { +// CameraPane.Ymax = spoth; +// } info.g.drawArc(boundary.x, boundary.y, boundary.width, boundary.height, 0, 360); //info.g.drawArc(spot.x, spotw, spot.width/2, boundary.height/2, 0, 360); - if (CameraPane.Xmin > boundary.x) - { - CameraPane.Xmin = boundary.x; - } - if (CameraPane.Xmax < boundary.x + boundary.width) - { - CameraPane.Xmax = boundary.x + boundary.width; - } - if (CameraPane.Ymin > boundary.y) - { - CameraPane.Ymin = boundary.y; - } - if (CameraPane.Ymax < boundary.y + boundary.height) - { - CameraPane.Ymax = boundary.y + boundary.height; - } +// if (CameraPane.Xmin > boundary.x) +// { +// CameraPane.Xmin = boundary.x; +// } +// if (CameraPane.Xmax < boundary.x + boundary.width) +// { +// CameraPane.Xmax = boundary.x + boundary.width; +// } +// if (CameraPane.Ymin > boundary.y) +// { +// CameraPane.Ymin = boundary.y; +// } +// if (CameraPane.Ymax < boundary.y + boundary.height) +// { +// CameraPane.Ymax = boundary.y + boundary.height; +// } return; } } diff --git a/PointFlow.java b/PointFlow.java index f1f806b..ab8baa4 100644 --- a/PointFlow.java +++ b/PointFlow.java @@ -102,208 +102,7 @@ double resizefactor = 1; static cVector tmp = new cVector(); - - void CallList(CameraPane display, Object3D /*Composite*/ root, boolean selected, boolean blocked) - { - CreateHT(); - float r = display.modelParams0[0]; - float g = display.modelParams0[1]; - float b = display.modelParams0[2]; - float opacity = display.modelParams5[1]; - - //final GL gl = GLU.getCurrentGL(); - GL gl = display.GetGL(); // getGL(); - - int s = points.size(); - - boolean cf = gl.glIsEnabled(gl.GL_CULL_FACE); - gl.glEnable(gl.GL_CULL_FACE); - - for (int i=s; --i>=0;) - //for (int i=0; i<s; i++) - { - cVector v = points.get(i); - - double mindist = Double.MAX_VALUE; - - double size = minimumSize; - - double distancenext = 0; - - if (i > 0) - { - cVector w = points.get(i-1); - - double dist = w.distance(v); - - distancenext = dist; - - if (mindist > dist) - { - mindist = dist; - size = mindist*resizefactor; - } - } - - if (i < s-1) - { - cVector w = points.get(i+1); - - double dist = w.distance(v); - - if (mindist > dist) - { - mindist = dist; - size = mindist*resizefactor; - } - } - - if (size < minimumSize) - size = minimumSize; - if (size > maximumSize) - size = maximumSize; - - double tx = v.x; - double ty = v.y; - double tz = v.z; - - // if (tx == 0 && ty == 0 && tz == 0) - // continue; - - gl.glMatrixMode(gl.GL_TEXTURE); - gl.glPushMatrix(); - texmat[12] = texmat[13] = texmat[14] = i; - - gl.glMultMatrixf(texmat, 0); - - gl.glMatrixMode(gl.GL_MODELVIEW); - gl.glPushMatrix(); - - gl.glTranslated(tx,ty,tz); - - gl.glScaled(size,size,size); - -// float cr = colorBuf.get(index4); -// float cg = colorBuf.get(index4+1); -// float cb = colorBuf.get(index4+2); -// float ca = colorBuf.get(index4+3); -// -// display.modelParams0[0] = r * cr; -// display.modelParams0[1] = g * cg; -// display.modelParams0[2] = b * cb; -// -// display.modelParams5[1] = opacity * ca; -// -// gl.glProgramEnvParameter4fvARB(gl.GL_FRAGMENT_PROGRAM_ARB, 0, display.modelParams0, 0); -// gl.glProgramEnvParameter4fvARB(gl.GL_FRAGMENT_PROGRAM_ARB, 5, display.modelParams5, 0); -// -// RandomNode.globalseed = (int)sizeBuf.get(index3+2); // i; -// RandomNode.globalseed2 = RandomNode.globalseed; -// -//// gl.glColor4f(cr,cg,cb,ca); -// // gl.glScalef(1024/16,1024/16,1024/16); - geo.Draw/*Node*/(display,null,selected, blocked); - - gl.glPopMatrix(); - - double step = size/4; // - - if (i == 0 || size == 0 || distancenext > 8*size || distancenext < step) - continue; - - int nbsteps = (int)(distancenext/step); - - step = distancenext/nbsteps; - - cVector next = points.get(i-1); - - tmp.set(next); - tmp.sub(v); - tmp.normalize(); - tmp.mul(step); - - // calculate next size - mindist = Double.MAX_VALUE; - - double nextsize = minimumSize; - - if (i > 1) - { - cVector w = points.get(i-2); - - double dist = w.distance(next); - - if (mindist > dist) - { - mindist = dist; - nextsize = mindist*resizefactor; - } - } - - double dist = v.distance(next); - - if (mindist > dist) - { - mindist = dist; - nextsize = mindist*resizefactor; - } - - if (nextsize < minimumSize) - nextsize = minimumSize; - if (nextsize > maximumSize) - nextsize = maximumSize; - // - - double count = 0; - - while (distancenext > 0.000000001) // step - { - gl.glPushMatrix(); - - gl.glTranslated(tx + tmp.x*count, ty + tmp.y*count, tz + tmp.z*count); - - double K = count/nbsteps; - - double intersize = K*nextsize + (1-K)*size; - - gl.glScaled(intersize,intersize,intersize); - - geo.Draw/*Node*/(display,null,selected,blocked); - - count++; - - distancenext -= step; - - gl.glPopMatrix(); - } - - if (count != nbsteps) - assert(count == nbsteps); - - // gl.glScalef(16.0f/1024,16.0f/1024,16.0f/1024); - //gl.glTranslatef(-tx,-ty,-tz); - - gl.glMatrixMode(gl.GL_TEXTURE); - gl.glPopMatrix(); - } - - if (!cf) - gl.glDisable(gl.GL_CULL_FACE); - -// display.modelParams0[0] = r; -// display.modelParams0[1] = g; -// display.modelParams0[2] = b; -// -// display.modelParams5[1] = opacity; -// -// gl.glProgramEnvParameter4fvARB(gl.GL_FRAGMENT_PROGRAM_ARB, 0, display.modelParams0, 0); -// gl.glProgramEnvParameter4fvARB(gl.GL_FRAGMENT_PROGRAM_ARB, 5, display.modelParams5, 0); - - gl.glMatrixMode(gl.GL_MODELVIEW); - } - - void createEditWindow(GroupEditor callee, boolean newWindow) { //editWindow = (new SphereEditor(this, deepCopy(), callee)).GetEditor(); diff --git a/cLinker.java b/cLinker.java index 5441199..0e3467c 100644 --- a/cLinker.java +++ b/cLinker.java @@ -34,7 +34,7 @@ //if(count <= 0) // return; - if(display.DrawMode() == display.SELECTION || CameraPane.DEBUG_SELECTION) + if(display.DrawMode() == display.SELECTION || display.IsDebugSelection()) { super.draw(display, root, selected, blocked); return; diff --git a/iCameraPane.java b/iCameraPane.java index 9d55774..0ecb003 100644 --- a/iCameraPane.java +++ b/iCameraPane.java @@ -6,6 +6,8 @@ static final public int SHADOW = 2; static final public int OCCLUSION = 3; + boolean IsDebugSelection(); + boolean IsBoxMode(); void ClearDepth(); @@ -33,12 +35,15 @@ void PushTextureMatrix(double[][] matrix, int count); void PopTextureMatrix(double[][] matrix); + Camera[] Cameras(); + Camera EyeCamera(); - Camera LightCamera(); - + Camera ManipCamera(); Camera RenderCamera(); + cVector TargetLookAt(); + // Should be cMaterial void PushMaterial(Object3D obj, boolean selected); void PushMaterial2(Object3D obj, boolean selected); @@ -54,4 +59,6 @@ void DrawFace(Object3D obj, Vertex pv, Vertex qv, Vertex rv, Face face); void DrawParticles(TriMesh geo, Object3D shape, boolean selected, boolean rotate); + + void PrepOcclusion(BoundaryRep br, double[][] transform); } -- Gitblit v1.6.2