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 --- CameraPane.java | 319 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 312 insertions(+), 7 deletions(-) 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 { -- Gitblit v1.6.2