From ec9d13e42c9c8674739acefb0769a9273a1048c9 Mon Sep 17 00:00:00 2001 From: Normand Briere <nbriere@noware.ca> Date: Mon, 22 Apr 2019 20:14:09 -0400 Subject: [PATCH] Refactoring GelGL. --- VehicleDemo.java | 2 cMesh.java | 102 ------- iCameraPane.java | 18 + BoundaryRep.java | 2 cLinker.java | 2 CameraPane.java | 363 +++++++++++++++++++++++++ LA.java | 3 Merge.java | 44 +- cSpring.java | 2 GLShapeDrawer.java | 6 Object3D.java | 235 +--------------- GenericJoint.java | 14 12 files changed, 443 insertions(+), 350 deletions(-) diff --git a/BoundaryRep.java b/BoundaryRep.java index 4667636..cbdb1a9 100644 --- a/BoundaryRep.java +++ b/BoundaryRep.java @@ -4428,7 +4428,7 @@ } } - void CullVertex(javax.media.opengl.GL gl, boolean shadow) + void CullVertex(javax.media.opengl.GL glNOTUSED, boolean shadowNOTUSED) { CameraPane.glu.gluProject(vect5.x,vect5.y,vect5.z, CameraPane.tempmat,0, CameraPane.tempmat2,0, diff --git a/CameraPane.java b/CameraPane.java index b54e1a7..8c8c173 100644 --- a/CameraPane.java +++ b/CameraPane.java @@ -191,6 +191,35 @@ /// INTERFACE + public javax.media.opengl.GL GetGL0() + { + return null; + } + + public int GenList() + { + javax.media.opengl.GL gl = GetGL(); + return gl.glGenLists(1); + } + + public void NewList(int id) + { + javax.media.opengl.GL gl = GetGL(); + gl.glNewList(id, gl.GL_COMPILE); //_AND_EXECUTE); + } + + public void CallList(int id) + { + javax.media.opengl.GL gl = GetGL(); + gl.glCallList(id); + } + + public void EndList() + { + javax.media.opengl.GL gl = GetGL(); + gl.glEndList(); + } + public boolean IsBoxMode() { return BOXMODE; @@ -1059,7 +1088,336 @@ gl.glMatrixMode(gl.GL_MODELVIEW); } + public void DrawBox(cVector min, cVector max) + { + javax.media.opengl.GL gl = GetGL(); + gl.glBegin(gl.GL_LINES); + + gl.glVertex3d(min.x, min.y, min.z); + gl.glVertex3d(min.x, min.y, max.z); + gl.glVertex3d(min.x, min.y, min.z); + gl.glVertex3d(min.x, max.y, min.z); + gl.glVertex3d(min.x, min.y, min.z); + gl.glVertex3d(max.x, min.y, min.z); + + gl.glVertex3d(max.x, max.y, max.z); + gl.glVertex3d(min.x, max.y, max.z); + gl.glVertex3d(max.x, max.y, max.z); + gl.glVertex3d(max.x, min.y, max.z); + gl.glVertex3d(max.x, max.y, max.z); + gl.glVertex3d(max.x, max.y, min.z); + + gl.glEnd(); + } + + public void DrawGeometry(BoundaryRep bRep, boolean flipV, boolean selectmode) + { + int[] strips = bRep.getRawIndices(); + + javax.media.opengl.GL gl = GetGL(); + + // TRIANGLE STRIP ARRAY + if (bRep.trimmed) + { + float[] v = bRep.getRawVertices(); + float[] n = bRep.getRawNormals(); + float[] c = bRep.getRawColors(); + float[] uv = bRep.getRawUVMap(); + + int count2 = 0; + int count3 = 0; + + if (n.length > 0) + { + for (int i = 0; i < strips.length; i++) + { + gl.glBegin(gl.GL_TRIANGLE_STRIP); + + /* + boolean locked = false; + float eps = 0.1f; + boolean wrap = CameraPane.UVWRAP; // true; // UV WRAP TEXTURE ISSUE: true = artifacts, false = nice + + int dot = 0; + + if ((dot&1) == 0) + dot |= (Math.abs(qv.s - pv.s) < eps && Math.abs(qv.t - pv.t) < eps) ? 3 : 1; + + if (wrap || (dot&2) != 0) // Math.abs(qv.s - pv.s) < eps && Math.abs(qv.t - pv.t) < eps) + gl.glTexCoord2f((float) qv.s, (float) qv.t); + else + { + locked = true; + gl.glTexCoord2f((float) pv.s, (float) pv.t); + } + //System.out.println("vertexq = " + qv.x + ", " + qv.y + ", " + qv.z); + gl.glVertex3f((float) qv.x, (float) qv.y, (float) qv.z); + if (hasnorm) + { + //System.out.println("normalr = " + rv.norm.x + ", " + rv.norm.y + ", " + rv.norm.z); + gl.glNormal3f((float) rv.norm.x, (float) rv.norm.y, (float) rv.norm.z); + } + + if ((dot&4) == 0) + dot |= (Math.abs(rv.s - pv.s) < eps && Math.abs(rv.t - pv.t) < eps) ? 12 : 4; + + if (wrap || !locked && (dot&8) != 0) + gl.glTexCoord2f((float) rv.s, (float) rv.t); + else + gl.glTexCoord2f((float) pv.s, (float) pv.t); + + f.dot = dot; + */ + + if (!selectmode) + { + if (n[count3] != 0 || n[count3 + 1] != 0 || n[count3 + 2] != 0) + { + gl.glNormal3f(n[count3], n[count3 + 1], n[count3 + 2]); + } else + { + gl.glNormal3f(0, 0, 1); + } + + if (c != null) + //System.out.println("glcolor = " + c[count3] + ", " + c[count3+1] + ", " + c[count3+2]); + { + gl.glColor4f(c[count3/3], c[count3/3 /* + 1*/], c[count3/3 /* + 2*/], 1); + } + } + if (flipV) + gl.glTexCoord2f(uv[count2], 1-uv[count2 + 1]); + else + gl.glTexCoord2f(uv[count2], uv[count2 + 1]); + //System.out.println("vertex1 = " + v[count3] + ", " + v[count3+1] + ", " + v[count3+2]); + gl.glVertex3f(v[count3], v[count3 + 1], v[count3 + 2]); + + count2 += 2; + count3 += 3; + if (!selectmode) + { + if (n[count3] != 0 || n[count3 + 1] != 0 || n[count3 + 2] != 0) + { + gl.glNormal3f(n[count3], n[count3 + 1], n[count3 + 2]); + } else + { + gl.glNormal3f(0, 0, 1); + } + if (c != null) + { + gl.glColor4f(c[count3/3], c[count3/3 /* + 1*/], c[count3/3 /* + 2*/], 1); + } + } + if (flipV) + gl.glTexCoord2f(uv[count2], 1-uv[count2 + 1]); + else + gl.glTexCoord2f(uv[count2], uv[count2 + 1]); + //System.out.println("vertex2 = " + v[count3] + ", " + v[count3+1] + ", " + v[count3+2]); + gl.glVertex3f(v[count3], v[count3 + 1], v[count3 + 2]); + + count2 += 2; + count3 += 3; + for (int j = 0; j < strips[i] - 2; j++) + { + //gl.glTexCoord2d(...); + if (!selectmode) + { + if (n[count3] != 0 || n[count3 + 1] != 0 || n[count3 + 2] != 0) + { + gl.glNormal3f(n[count3], n[count3 + 1], n[count3 + 2]); + } else + { + gl.glNormal3f(0, 0, 1); + } + if (c != null) + { + gl.glColor4f(c[count3/3], c[count3/3 /* + 1*/], c[count3/3 /* + 2*/], 1); + } + } + + if (flipV) + gl.glTexCoord2f(uv[count2], 1-uv[count2 + 1]); + else + gl.glTexCoord2f(uv[count2], uv[count2 + 1]); + //System.out.println("coord3 = " + uv[count2] + ", " + uv[count2+1]); + gl.glVertex3f(v[count3], v[count3 + 1], v[count3 + 2]); + count2 += 2; + count3 += 3; + } + + gl.glEnd(); + } + } + + assert count3 == v.length; + } + else // !trimmed + { + int count = 0; + for (int i = 0; i < strips.length; i++) + { + gl.glBegin(gl.GL_TRIANGLE_STRIP); + + Vertex p = bRep.GetVertex(bRep.indices[count++]); + Vertex q = bRep.GetVertex(bRep.indices[count++]); + + drawVertex(gl, p, flipV, selectmode); + drawVertex(gl, q, flipV, selectmode); + + for (int j = 0; j < strips[i] - 2; j++) + { + Vertex r = bRep.GetVertex(bRep.indices[count++]); + + // if (j%2 == 0) + // drawFace(p, q, r, display, null); + // else + // drawFace(p, r, q, display, null); + + // p = q; + // q = r; + drawVertex(gl, r, flipV, selectmode); + } + + gl.glEnd(); + } + } + } + + static cSpring.Point3D temp = new cSpring.Point3D(); + static cSpring.Point3D temp2 = new cSpring.Point3D(); + static cSpring.Point3D temp3 = new cSpring.Point3D(); + + public void DrawDynamicMesh(cMesh mesh) + { + GL gl = GetGL(); // getGL(); + + cSpring.PhysicsController3D Phys = mesh.Phys; + + gl.glDisable(gl.GL_LIGHTING); + + gl.glLineWidth(1); + gl.glColor3f(1,1,1); + gl.glBegin(gl.GL_LINES); + double scale = 0; + int count = 0; + for (int s=0; s<Phys.allSprings.size(); s++) + { + cSpring.Spring spring = Phys.allSprings.get(s); + if(s == 0) + { + //System.out.println(" spring : " + spring.a.position + "; " + spring.b.position); + } + if (mesh.showsprings) + { + temp.set(spring.a.position); + temp.add(spring.b.position); + temp.mul(0.5); + temp2.set(spring.a.position); + temp2.sub(spring.b.position); + temp2.mul(spring.restLength/2); + temp.sub(temp2); + gl.glVertex3f((float)temp.x, (float)temp.y, (float)temp.z); + temp.add(temp2); + temp.add(temp2); + gl.glVertex3f((float)temp.x, (float)temp.y, (float)temp.z); + } + + if (spring.isHandle) + continue; + + //if (scale < spring.restLength) + scale += spring.restLength; + count++; + } + gl.glEnd(); + + if (count == 0) + scale = 0.01; + else + scale /= count * 3; + + //scale = 0.25; + + if (mesh.ShowInfo()) + { + gl.glLineWidth(4); + for (int s=0; s<Phys.allNodes.size(); s++) + { + cSpring.DynamicNode node = Phys.allNodes.get(s); + if (node.mass == 0) + continue; + + int i = node.springs==null?-1:node.springs.size(); + gl.glColor3f((i>>2)&1,(i>>1)&1,i&1); + //temp.set(node.springForce.x, node.springForce.y, node.springForce.z); + //temp.normalize(); + //gl.glColor3d((temp.x+1)/2, (temp.y+1)/2, (temp.z+1)/2); + gl.glBegin(gl.GL_LINES); + gl.glVertex3d(node.position.x, node.position.y, node.position.z); + //gl.glVertex3d(node.position.x + node.normal.x*scale, node.position.y + node.normal.y*scale, node.position.z + node.normal.z*scale); + gl.glVertex3d(node.position.x + mesh.bRep.GetVertex(s).norm.x*scale, + node.position.y + mesh.bRep.GetVertex(s).norm.y*scale, + node.position.z + mesh.bRep.GetVertex(s).norm.z*scale); + gl.glEnd(); + } + + gl.glLineWidth(8); + for (int s=0; s<Phys.allNodes.size(); s++) + { + cSpring.DynamicNode node = Phys.allNodes.get(s); + + if (node.springs != null) + { + for (int i=0; i<node.springs.size(); i+=1) + { + cSpring.DynamicNode f = node.springs.get(i).GetOther(node); + + int c = i+1; + // c = node.springs.get(i).nbcopies; + + gl.glColor3f((c>>2)&1,(c>>1)&1,c&1); + gl.glBegin(gl.GL_LINES); + gl.glVertex3d(node.position.x, node.position.y, node.position.z); + gl.glVertex3d(f.position.x/3+node.position.x*2/3, f.position.y/3+node.position.y*2/3, f.position.z/3+node.position.z*2/3); + gl.glEnd(); + } + } + } + + gl.glLineWidth(1); + } + + gl.glEnable(gl.GL_LIGHTING); + } + /// INTERFACE + + public void StartTriangles() + { + javax.media.opengl.GL gl = GetGL(); + gl.glBegin(gl.GL_TRIANGLES); + } + + public void EndTriangles() + { + GetGL().glEnd(); + } + + void drawVertex(javax.media.opengl.GL gl, Vertex pv, boolean flipV, boolean selectmode) + { + if (!selectmode) + { + gl.glNormal3f((float) pv.norm.x, (float) pv.norm.y, (float) pv.norm.z); + gl.glColor4f(pv.AO, pv.AO, pv.AO, 1); + + if (flipV) + gl.glTexCoord2f((float) pv.s, 1-(float) pv.t); + else + gl.glTexCoord2f((float) pv.s, (float) pv.t); + } + + gl.glVertex3f((float) pv.x, (float) pv.y, (float) pv.z); + } void SetColor(Object3D obj, Vertex p0) { @@ -16695,10 +17053,11 @@ static IntBuffer textbuffer = null; // IntBuffer.allocate(TEXT_WIDTH*8*8 * TEXT_HEIGHT); // Depth buffer format //private int depth_format; - static public void NextIndex(Object3D o, GL gl) + + public void NextIndex() { indexcount+=16; - gl.glColor3d(((indexcount >>> 16) & 255) / 255.0, ((indexcount >>> 8) & 255) / 255.0, ((indexcount) & 255) / 255.0); + GetGL().glColor3d(((indexcount >>> 16) & 255) / 255.0, ((indexcount >>> 8) & 255) / 255.0, ((indexcount) & 255) / 255.0); //objects[indexcount] = o; //System.out.println("indexcount = " + indexcount); } diff --git a/GLShapeDrawer.java b/GLShapeDrawer.java index 38fb421..ccf72d9 100644 --- a/GLShapeDrawer.java +++ b/GLShapeDrawer.java @@ -142,7 +142,7 @@ //System.out.println("shape="+shape+" type="+BroadphaseNativeTypes.forValue(shape.getShapeType())); - GL gl = display.GetGL(); + GL gl = display.GetGL0(); gl.glPushMatrix(); trans.getOpenGLMatrix(glMat); @@ -552,7 +552,7 @@ static public void drawSphere(iCameraPane display, float radius, int slices, int stacks) { - GL gl = display.GetGL(); + GL gl = display.GetGL0(); sphereKey.radius = radius; Integer glList = sphereDisplayLists.get(sphereKey); @@ -624,7 +624,7 @@ static public void drawCylinder(iCameraPane display, float radius, float halfHeight, int upAxis) { - GL gl = display.GetGL(); + GL gl = display.GetGL0(); gl.glPushMatrix(); switch (upAxis) diff --git a/GenericJoint.java b/GenericJoint.java index 90f9509..ab83012 100644 --- a/GenericJoint.java +++ b/GenericJoint.java @@ -330,12 +330,14 @@ e.printStackTrace(); } - display.GetGL().glPushMatrix(); + //display.GetGL().glPushMatrix(); + display.PushMatrix(LA.Identity, 1); Vector3f v = ragdolls.get(0).bodies[0].worldTransform.origin; // display.GetGL().glTranslatef(-v.x,0,-v.z); super.DrawNode(display, root, selected); - display.GetGL().glPopMatrix(); + //display.GetGL().glPopMatrix(); + display.PopMatrix(LA.Identity); // assert(bRep != null); @@ -453,7 +455,7 @@ public void renderme(iCameraPane display) { - GL gl = display!=null?display.GetGL():null; + GL gl = display!=null?display.GetGL0():null; // gl0 = gl; if (GetDynamicsWorld() != null) @@ -798,7 +800,7 @@ public void drawCube(iCameraPane display, float extent) { - GL gl = display.GetGL(); + GL gl = display.GetGL0(); extent = extent * 0.5f; @@ -1524,7 +1526,7 @@ public void drawSphere(iCameraPane display, float radius, int slices, int stacks) { - GL gl = display.GetGL(); + GL gl = display.GetGL0(); sphereKey.radius = radius; Integer glList = sphereDisplayLists.get(sphereKey); @@ -1596,7 +1598,7 @@ public void drawCylinder(iCameraPane display, float radius, float halfHeight, int upAxis) { - GL gl = display.GetGL(); + GL gl = display.GetGL0(); gl.glPushMatrix(); switch (upAxis) diff --git a/LA.java b/LA.java index 20a9211..a667209 100644 --- a/LA.java +++ b/LA.java @@ -623,6 +623,7 @@ private static int indxr[] = new int[4]; private static int indxc[] = new int[4]; + static double[][] Identity = new double[4][4]; static int SIZE = 0; // 65536*64; @@ -638,6 +639,8 @@ costable[i] = Math.cos(PI2 * i/SIZE); sintable[i] = Math.sin(PI2 * i*i/SIZE/SIZE); } + + LA.matIdentity(Identity); } static double cos(double x0) diff --git a/Merge.java b/Merge.java index 138d4b1..be363c1 100644 --- a/Merge.java +++ b/Merge.java @@ -160,27 +160,27 @@ // debug stuff if (false) // bRep.averagepoints != null) { - javax.media.opengl.GL gl = display.GetGL(); - - gl.glColor3f(1, 0, 0); - //gl.glMaterialfv(gl.GL_FRONT, gl.GL_DIFFUSE, colorV, 0); - //gl.glMaterialfv(gl.GL_BACK, gl.GL_DIFFUSE, colorV, 0); - - for (int i=0; i<NumGeometries(GetObject()); i++) - { - int i3 = i*3; - - float off = 0.005f; - - gl.glBegin(gl.GL_LINES); - gl.glVertex3d(bRep.averagepoints[i3]-off, bRep.averagepoints[i3+1], bRep.averagepoints[i3+2]); - gl.glVertex3d(bRep.averagepoints[i3]+off, bRep.averagepoints[i3+1], bRep.averagepoints[i3+2]); - gl.glVertex3d(bRep.averagepoints[i3], bRep.averagepoints[i3+1]-off, bRep.averagepoints[i3+2]); - gl.glVertex3d(bRep.averagepoints[i3], bRep.averagepoints[i3+1]+off, bRep.averagepoints[i3+2]); - gl.glVertex3d(bRep.averagepoints[i3], bRep.averagepoints[i3+1], bRep.averagepoints[i3+2]-off); - gl.glVertex3d(bRep.averagepoints[i3], bRep.averagepoints[i3+1], bRep.averagepoints[i3+2]+off); - gl.glEnd(); - } +// javax.media.opengl.GL gl = display.GetGL(); +// +// gl.glColor3f(1, 0, 0); +// //gl.glMaterialfv(gl.GL_FRONT, gl.GL_DIFFUSE, colorV, 0); +// //gl.glMaterialfv(gl.GL_BACK, gl.GL_DIFFUSE, colorV, 0); +// +// for (int i=0; i<NumGeometries(GetObject()); i++) +// { +// int i3 = i*3; +// +// float off = 0.005f; +// +// gl.glBegin(gl.GL_LINES); +// gl.glVertex3d(bRep.averagepoints[i3]-off, bRep.averagepoints[i3+1], bRep.averagepoints[i3+2]); +// gl.glVertex3d(bRep.averagepoints[i3]+off, bRep.averagepoints[i3+1], bRep.averagepoints[i3+2]); +// gl.glVertex3d(bRep.averagepoints[i3], bRep.averagepoints[i3+1]-off, bRep.averagepoints[i3+2]); +// gl.glVertex3d(bRep.averagepoints[i3], bRep.averagepoints[i3+1]+off, bRep.averagepoints[i3+2]); +// gl.glVertex3d(bRep.averagepoints[i3], bRep.averagepoints[i3+1], bRep.averagepoints[i3+2]-off); +// gl.glVertex3d(bRep.averagepoints[i3], bRep.averagepoints[i3+1], bRep.averagepoints[i3+2]+off); +// gl.glEnd(); +// } } } @@ -398,7 +398,7 @@ public void drawCube(iCameraPane display, float extent) { - GL gl = display.GetGL(); + GL gl = display.GetGL0(); extent = extent * 0.5f; diff --git a/Object3D.java b/Object3D.java index bdfe925..8beaebd 100644 --- a/Object3D.java +++ b/Object3D.java @@ -5,6 +5,7 @@ import java.util.Vector; import javax.media.j3d.Transform3D; +import javax.media.opengl.GL; import javax.vecmath.Vector3d; import javax.imageio.ImageIO; @@ -5371,7 +5372,7 @@ return; } - javax.media.opengl.GL gl = display.GetGL(); + //javax.media.opengl.GL gl = display.GetGL(); /* if (touched) @@ -5423,7 +5424,7 @@ //if (displaylist == -1 && usecalllists) if ((bRep != null && bRep.displaylist <= 0) && usecalllists) // june 2013 { - bRep.displaylist = gl.glGenLists(1); + bRep.displaylist = display.GenList(); assert(bRep.displaylist != 0); // System.err.println("glGenLists: " + bRep.displaylist + " for " + this); //System.out.println("\tgen list " + list); @@ -5435,14 +5436,16 @@ if (usecalllists) { // System.err.println("new list " + bRep.displaylist + " for " + this); - gl.glNewList(bRep.displaylist, gl.GL_COMPILE); //_AND_EXECUTE); + display.NewList(bRep.displaylist); } + CallList(display, root, selected, blocked); + // compiled = true; if (usecalllists) { // System.err.println("end list " + bRep.displaylist + " for " + this); - gl.glEndList(); + display.EndList(); } //gl.glDrawBuffer(gl.GL_BACK); // XXX touched = false; @@ -5490,7 +5493,7 @@ if (display.DrawMode() == iCameraPane.SHADOW) { if (!link2master // tricky to cull in shadow mode. - && GetBRep().FrustumCull(this, gl, display.LightCamera(), true)) + && GetBRep().FrustumCull(this, null, display.LightCamera(), true)) { //System.out.print("CULLED"); culled = true; @@ -5498,7 +5501,7 @@ } else //GetBRep().getBounds(v0, v1, this); - if (GetBRep().FrustumCull(this, gl, display.RenderCamera(), false)) + if (GetBRep().FrustumCull(this, null, display.RenderCamera(), false)) culled = true; // LA.xformPos(v0, display.renderCamera.toScreen, v0); @@ -5538,7 +5541,7 @@ { if (GetBRep() != null) { - CameraPane.NextIndex(this, gl); + display.NextIndex(); // vertex color conflict : gl.glCallList(list); DrawNode(display, root, selected); if (this instanceof BezierPatch) @@ -5595,7 +5598,7 @@ // System.err.println("glCallList: " + bRep.displaylist + " for " + this); assert(bRep.displaylist != 0); - gl.glCallList(bRep.displaylist); + display.CallList(bRep.displaylist); // june 2013 drawSelf(display, root, selected); } } @@ -5897,7 +5900,7 @@ // bRep.lock = true; - javax.media.opengl.GL gl = display.GetGL(); + //javax.media.opengl.GL gl = display.GetGL(); if (CameraPane.BOXMODE && !selected) // || CameraPane.movingcamera) { @@ -5914,23 +5917,7 @@ bRep.getMinMax(min, max, 100); - gl.glBegin(gl.GL_LINES); - - gl.glVertex3d(min.x, min.y, min.z); - gl.glVertex3d(min.x, min.y, max.z); - gl.glVertex3d(min.x, min.y, min.z); - gl.glVertex3d(min.x, max.y, min.z); - gl.glVertex3d(min.x, min.y, min.z); - gl.glVertex3d(max.x, min.y, min.z); - - gl.glVertex3d(max.x, max.y, max.z); - gl.glVertex3d(min.x, max.y, max.z); - gl.glVertex3d(max.x, max.y, max.z); - gl.glVertex3d(max.x, min.y, max.z); - gl.glVertex3d(max.x, max.y, max.z); - gl.glVertex3d(max.x, max.y, min.z); - - gl.glEnd(); + display.DrawBox(min, max); return; } @@ -5984,178 +5971,14 @@ new Exception().printStackTrace(); return; } - - // TRIANGLE STRIP ARRAY - if (bRep.trimmed) - { - float[] v = bRep.getRawVertices(); - float[] n = bRep.getRawNormals(); - float[] c = bRep.getRawColors(); - float[] uv = bRep.getRawUVMap(); - - int count2 = 0; - int count3 = 0; - - if (n.length > 0) - { - for (int i = 0; i < strips.length; i++) - { - gl.glBegin(gl.GL_TRIANGLE_STRIP); - - /* - boolean locked = false; - float eps = 0.1f; - boolean wrap = CameraPane.UVWRAP; // true; // UV WRAP TEXTURE ISSUE: true = artifacts, false = nice - - int dot = 0; - - if ((dot&1) == 0) - dot |= (Math.abs(qv.s - pv.s) < eps && Math.abs(qv.t - pv.t) < eps) ? 3 : 1; - - if (wrap || (dot&2) != 0) // Math.abs(qv.s - pv.s) < eps && Math.abs(qv.t - pv.t) < eps) - gl.glTexCoord2f((float) qv.s, (float) qv.t); - else - { - locked = true; - gl.glTexCoord2f((float) pv.s, (float) pv.t); - } - //System.out.println("vertexq = " + qv.x + ", " + qv.y + ", " + qv.z); - gl.glVertex3f((float) qv.x, (float) qv.y, (float) qv.z); - if (hasnorm) - { - //System.out.println("normalr = " + rv.norm.x + ", " + rv.norm.y + ", " + rv.norm.z); - gl.glNormal3f((float) rv.norm.x, (float) rv.norm.y, (float) rv.norm.z); - } - - if ((dot&4) == 0) - dot |= (Math.abs(rv.s - pv.s) < eps && Math.abs(rv.t - pv.t) < eps) ? 12 : 4; - - if (wrap || !locked && (dot&8) != 0) - gl.glTexCoord2f((float) rv.s, (float) rv.t); - else - gl.glTexCoord2f((float) pv.s, (float) pv.t); - - f.dot = dot; - */ - - if (!selectmode) - { - if (n[count3] != 0 || n[count3 + 1] != 0 || n[count3 + 2] != 0) - { - gl.glNormal3f(n[count3], n[count3 + 1], n[count3 + 2]); - } else - { - gl.glNormal3f(0, 0, 1); - } - - if (c != null) - //System.out.println("glcolor = " + c[count3] + ", " + c[count3+1] + ", " + c[count3+2]); - { - gl.glColor4f(c[count3/3], c[count3/3 /* + 1*/], c[count3/3 /* + 2*/], 1); - } - } - if (flipV) - gl.glTexCoord2f(uv[count2], 1-uv[count2 + 1]); - else - gl.glTexCoord2f(uv[count2], uv[count2 + 1]); - //System.out.println("vertex1 = " + v[count3] + ", " + v[count3+1] + ", " + v[count3+2]); - gl.glVertex3f(v[count3], v[count3 + 1], v[count3 + 2]); - - count2 += 2; - count3 += 3; - if (!selectmode) - { - if (n[count3] != 0 || n[count3 + 1] != 0 || n[count3 + 2] != 0) - { - gl.glNormal3f(n[count3], n[count3 + 1], n[count3 + 2]); - } else - { - gl.glNormal3f(0, 0, 1); - } - if (c != null) - { - gl.glColor4f(c[count3/3], c[count3/3 /* + 1*/], c[count3/3 /* + 2*/], 1); - } - } - if (flipV) - gl.glTexCoord2f(uv[count2], 1-uv[count2 + 1]); - else - gl.glTexCoord2f(uv[count2], uv[count2 + 1]); - //System.out.println("vertex2 = " + v[count3] + ", " + v[count3+1] + ", " + v[count3+2]); - gl.glVertex3f(v[count3], v[count3 + 1], v[count3 + 2]); - - count2 += 2; - count3 += 3; - for (int j = 0; j < strips[i] - 2; j++) - { - //gl.glTexCoord2d(...); - if (!selectmode) - { - if (n[count3] != 0 || n[count3 + 1] != 0 || n[count3 + 2] != 0) - { - gl.glNormal3f(n[count3], n[count3 + 1], n[count3 + 2]); - } else - { - gl.glNormal3f(0, 0, 1); - } - if (c != null) - { - gl.glColor4f(c[count3/3], c[count3/3 /* + 1*/], c[count3/3 /* + 2*/], 1); - } - } - - if (flipV) - gl.glTexCoord2f(uv[count2], 1-uv[count2 + 1]); - else - gl.glTexCoord2f(uv[count2], uv[count2 + 1]); - //System.out.println("coord3 = " + uv[count2] + ", " + uv[count2+1]); - gl.glVertex3f(v[count3], v[count3 + 1], v[count3 + 2]); - count2 += 2; - count3 += 3; - } - - gl.glEnd(); - } - } - - assert count3 == v.length; - } - else // !trimmed - { - int count = 0; - for (int i = 0; i < strips.length; i++) - { - gl.glBegin(gl.GL_TRIANGLE_STRIP); - - Vertex p = bRep.GetVertex(bRep.indices[count++]); - Vertex q = bRep.GetVertex(bRep.indices[count++]); - - drawVertex(gl, p, selectmode); - drawVertex(gl, q, selectmode); - - for (int j = 0; j < strips[i] - 2; j++) - { - Vertex r = bRep.GetVertex(bRep.indices[count++]); - -// if (j%2 == 0) -// drawFace(p, q, r, display, null); -// else -// drawFace(p, r, q, display, null); - -// p = q; -// q = r; - drawVertex(gl, r, selectmode); - } - - gl.glEnd(); - } - } + + display.DrawGeometry(bRep, flipV, selectmode); } else // catch (Error e) { // TRIANGLE ARRAY if (IsOpaque()) // Static()) { - gl.glBegin(gl.GL_TRIANGLES); + display.StartTriangles(); int facecount = bRep.FaceCount(); for (int i = 0; i < facecount; i++) { @@ -6220,7 +6043,7 @@ display.DrawFace(this, p, q, r, face); } - gl.glEnd(); + display.EndTriangles(); } else { @@ -6249,8 +6072,8 @@ //System.out.println("SORT"); java.util.Arrays.sort(facescompare); - - gl.glBegin(gl.GL_TRIANGLES); + + display.StartTriangles(); for (int i = 0; i < facecount; i++) { Face face = bRep.GetFace(facescompare[i].index); @@ -6264,11 +6087,12 @@ display.DrawFace(this, p, q, r, face); } - gl.glEnd(); + display.EndTriangles(); } if (false) // live && support != null && support.bRep != null) // debug weights { + /* gl.glDisable(gl.GL_LIGHTING); float[] colorV = new float[3]; @@ -6347,6 +6171,7 @@ // gl.glEnd(); } } + */ } } @@ -6405,22 +6230,6 @@ void Print(Vertex v) { //System.err.println("(" + v.x + ", " + v.y + ", " + v.z + ")"); - } - - void drawVertex(javax.media.opengl.GL gl, Vertex pv, boolean selectmode) - { - if (!selectmode) - { - gl.glNormal3f((float) pv.norm.x, (float) pv.norm.y, (float) pv.norm.z); - gl.glColor4f(pv.AO, pv.AO, pv.AO, 1); - - if (flipV) - gl.glTexCoord2f((float) pv.s, 1-(float) pv.t); - else - gl.glTexCoord2f((float) pv.s, (float) pv.t); - } - - gl.glVertex3f((float) pv.x, (float) pv.y, (float) pv.z); } void drawSelf(ClickInfo info, int level, boolean select) diff --git a/VehicleDemo.java b/VehicleDemo.java index 2c1a8af..e94648e 100755 --- a/VehicleDemo.java +++ b/VehicleDemo.java @@ -529,7 +529,7 @@ public void renderme0(iCameraPane display) { //updateCamera(); - GL gl = display.GetGL(); + GL gl = display.GetGL0(); if (dynamicsWorld != null) { int numObjects = dynamicsWorld.getNumCollisionObjects(); diff --git a/cLinker.java b/cLinker.java index 0e3467c..1487169 100644 --- a/cLinker.java +++ b/cLinker.java @@ -49,7 +49,7 @@ { cStatic.point7.set(stack.peek()); /**/ - javax.media.opengl.GL gl = display.GetGL(); + //javax.media.opengl.GL gl = display.GetGL(); //gl.glBegin(gl.GL_LINES); //gl.glVertex3d(stack.peek().x, stack.peek().y, stack.peek().z); diff --git a/cMesh.java b/cMesh.java index 863e918..d49f23c 100644 --- a/cMesh.java +++ b/cMesh.java @@ -1,6 +1,6 @@ import java.util.Hashtable; -import javax.media.opengl.GL; +//import javax.media.opengl.GL; public class cMesh extends cSpring { @@ -78,7 +78,7 @@ live = true; } - + Object3D deepCopy() { /* @@ -545,103 +545,7 @@ if(/*showsprings &&*/ Phys != null) { - GL gl = display.GetGL(); // getGL(); - - gl.glDisable(gl.GL_LIGHTING); - - gl.glLineWidth(1); - gl.glColor3f(1,1,1); - gl.glBegin(gl.GL_LINES); - double scale = 0; - int count = 0; - for (int s=0; s<Phys.allSprings.size(); s++) - { - Spring spring = Phys.allSprings.get(s); - if(s == 0) - { - //System.out.println(" spring : " + spring.a.position + "; " + spring.b.position); - } - if (showsprings) - { - temp.set(spring.a.position); - temp.add(spring.b.position); - temp.mul(0.5); - temp2.set(spring.a.position); - temp2.sub(spring.b.position); - temp2.mul(spring.restLength/2); - temp.sub(temp2); - gl.glVertex3f((float)temp.x, (float)temp.y, (float)temp.z); - temp.add(temp2); - temp.add(temp2); - gl.glVertex3f((float)temp.x, (float)temp.y, (float)temp.z); - } - - if (spring.isHandle) - continue; - - //if (scale < spring.restLength) - scale += spring.restLength; - count++; - } - gl.glEnd(); - - if (count == 0) - scale = 0.01; - else - scale /= count * 3; - - //scale = 0.25; - - if (ShowInfo()) - { - gl.glLineWidth(4); - for (int s=0; s<Phys.allNodes.size(); s++) - { - DynamicNode node = Phys.allNodes.get(s); - if (node.mass == 0) - continue; - - int i = node.springs==null?-1:node.springs.size(); - gl.glColor3f((i>>2)&1,(i>>1)&1,i&1); - //temp.set(node.springForce.x, node.springForce.y, node.springForce.z); - //temp.normalize(); - //gl.glColor3d((temp.x+1)/2, (temp.y+1)/2, (temp.z+1)/2); - gl.glBegin(gl.GL_LINES); - gl.glVertex3d(node.position.x, node.position.y, node.position.z); - //gl.glVertex3d(node.position.x + node.normal.x*scale, node.position.y + node.normal.y*scale, node.position.z + node.normal.z*scale); - gl.glVertex3d(node.position.x + bRep.GetVertex(s).norm.x*scale, - node.position.y + bRep.GetVertex(s).norm.y*scale, - node.position.z + bRep.GetVertex(s).norm.z*scale); - gl.glEnd(); - } - - gl.glLineWidth(8); - for (int s=0; s<Phys.allNodes.size(); s++) - { - DynamicNode node = Phys.allNodes.get(s); - - if (node.springs != null) - { - for (int i=0; i<node.springs.size(); i+=1) - { - DynamicNode f = node.springs.get(i).GetOther(node); - - int c = i+1; - // c = node.springs.get(i).nbcopies; - - gl.glColor3f((c>>2)&1,(c>>1)&1,c&1); - gl.glBegin(gl.GL_LINES); - gl.glVertex3d(node.position.x, node.position.y, node.position.z); - gl.glVertex3d(f.position.x/3+node.position.x*2/3, f.position.y/3+node.position.y*2/3, f.position.z/3+node.position.z*2/3); - gl.glEnd(); - } - } - } - - gl.glLineWidth(1); - } - - gl.glEnable(gl.GL_LIGHTING); + display.DrawDynamicMesh(this); } if (live && Globals.isLIVE() && display.DrawMode() == CameraPane.DEFAULT) diff --git a/cSpring.java b/cSpring.java index 47b7769..914577b 100644 --- a/cSpring.java +++ b/cSpring.java @@ -565,7 +565,7 @@ // } //new Exception().printStackTrace(); - GL gl = display.GetGL(); // getGL(); + GL gl = display.GetGL0(); // getGL(); //gl.glDisable(GL.GL_LIGHTING); diff --git a/iCameraPane.java b/iCameraPane.java index bfbe44c..866cbe7 100644 --- a/iCameraPane.java +++ b/iCameraPane.java @@ -24,7 +24,7 @@ boolean IsFrozen(); - javax.media.opengl.GL GetGL(); + javax.media.opengl.GL GetGL0(); // Currently in Globals int DrawMode(); @@ -60,6 +60,22 @@ void DrawFace(Object3D obj, Vertex pv, Vertex qv, Vertex rv, Face face); + void DrawBox(cVector min, cVector max); + + void DrawGeometry(BoundaryRep bRep, boolean flipV, boolean selectmode); + + void DrawDynamicMesh(cMesh c); + + void StartTriangles(); + void EndTriangles(); + + int GenList(); + void NewList(int id); + void CallList(int id); + void EndList(); + + void NextIndex(); + void DrawParticles(TriMesh geo, Object3D shape, boolean selected, boolean rotate); void PrepOcclusion(BoundaryRep br, double[][] transform); -- Gitblit v1.6.2