From f1c718cce66e5651a0dae91375db6ebfaded1a92 Mon Sep 17 00:00:00 2001 From: Normand Briere <nbriere@noware.ca> Date: Sat, 27 Apr 2019 21:33:41 -0400 Subject: [PATCH] Test unfold UV --- Object3D.java | 410 +++++++++++++++------------------------------------------ 1 files changed, 111 insertions(+), 299 deletions(-) diff --git a/Object3D.java b/Object3D.java index 18fd57e..70c7ead 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; @@ -430,16 +431,16 @@ { Object3D copy = this; - Camera parentcam = CameraPane.theRenderer.manipCamera; + Camera parentcam = Globals.theRenderer.ManipCamera(); - if (CameraPane.theRenderer.manipCamera == CameraPane.theRenderer.cameras[0]) + if (Globals.theRenderer.ManipCamera() == Globals.theRenderer.Cameras()[0]) { - parentcam = CameraPane.theRenderer.cameras[1]; + parentcam = Globals.theRenderer.Cameras()[1]; } - if (CameraPane.theRenderer.manipCamera == CameraPane.theRenderer.cameras[1]) + if (Globals.theRenderer.ManipCamera() == Globals.theRenderer.Cameras()[1]) { - parentcam = CameraPane.theRenderer.cameras[0]; + parentcam = Globals.theRenderer.Cameras()[0]; } if (this == parentcam) @@ -447,7 +448,7 @@ //assert(this instanceof Camera); for (int count = parentcam.GetTransformCount(); --count>=0;) - LA.xformPos(CameraPane.theRenderer.targetLookAt, parentcam.toParent, CameraPane.theRenderer.targetLookAt); + LA.xformPos(Globals.theRenderer.TargetLookAt(), parentcam.toParent, Globals.theRenderer.TargetLookAt()); } copy.marked ^= true; @@ -467,7 +468,7 @@ //assert(this instanceof Camera); for (int count = parentcam.GetTransformCount(); --count>=0;) - LA.xformPos(CameraPane.theRenderer.targetLookAt, parentcam.fromParent, CameraPane.theRenderer.targetLookAt); + LA.xformPos(Globals.theRenderer.TargetLookAt(), parentcam.fromParent, Globals.theRenderer.TargetLookAt()); } copy.Touch(); // display list issue @@ -602,7 +603,7 @@ return; } - if (CameraPane.fromscript) + if (Globals.fromscript) { transformcount = 0; return; @@ -2905,7 +2906,8 @@ { if (bRep != null) { - bRep.GenUV(); + bRep.GenUV(); //1); + //bRep.UnfoldUV(); Touch(); } } @@ -4854,7 +4856,7 @@ return globalTransform; } - void PreprocessOcclusion(CameraPane cp) + void PreprocessOcclusion(iCameraPane cp) { /* if (AOdone) @@ -5327,6 +5329,7 @@ && (Globals.DrawMode() == iCameraPane.SHADOW || Globals.CROWD); } + static boolean DEBUG_SELECTION = false; void Draw(iCameraPane display, Object3D /*Composite*/ root, boolean selected, boolean blocked) { @@ -5365,12 +5368,12 @@ } if ((//display.DrawMode() == CameraPane.SHADOW || - display.DrawMode() == CameraPane.SELECTION || CameraPane.DEBUG_SELECTION) && HasTransparency()) + display.DrawMode() == iCameraPane.SELECTION || display.IsDebugSelection()) && HasTransparency()) { return; } - javax.media.opengl.GL gl = display.GetGL(); + //javax.media.opengl.GL gl = display.GetGL(); /* if (touched) @@ -5406,7 +5409,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))) @@ -5422,7 +5425,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); @@ -5434,14 +5437,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; @@ -5484,12 +5489,12 @@ // 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)) + && GetBRep().FrustumCull(this, null, display.LightCamera(), true)) { //System.out.print("CULLED"); culled = true; @@ -5497,7 +5502,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); @@ -5533,11 +5538,11 @@ if (!culled) - if (display.DrawMode() == display.SELECTION || CameraPane.DEBUG_SELECTION) + if (display.DrawMode() == display.SELECTION || display.IsDebugSelection()) { if (GetBRep() != null) { - CameraPane.NextIndex(this, gl); + display.NextIndex(); // vertex color conflict : gl.glCallList(list); DrawNode(display, root, selected); if (this instanceof BezierPatch) @@ -5594,7 +5599,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); } } @@ -5894,9 +5899,10 @@ return; } + //bRep.GenUV(1/material.diffuseness); // bRep.lock = true; - javax.media.opengl.GL gl = display.GetGL(); + //javax.media.opengl.GL gl = display.GetGL(); if (CameraPane.BOXMODE && !selected) // || CameraPane.movingcamera) { @@ -5913,23 +5919,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; } @@ -5973,7 +5963,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(); @@ -5983,178 +5973,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++) { @@ -6219,7 +6045,7 @@ display.DrawFace(this, p, q, r, face); } - gl.glEnd(); + display.EndTriangles(); } else { @@ -6248,8 +6074,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); @@ -6263,11 +6089,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]; @@ -6346,6 +6173,7 @@ // gl.glEnd(); } } + */ } } @@ -6390,7 +6218,7 @@ center.add(r); center.mul(1.0/3); - center.sub(CameraPane.theRenderer.eyeCamera.location); + center.sub(Globals.theRenderer.EyeCamera().location); distance = center.dot(center); } @@ -6404,22 +6232,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) @@ -6993,83 +6805,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; } } @@ -7172,7 +6984,7 @@ case hitCenter: // Translate - scale *= 0.05f * info.pane.theRenderer.renderCamera.Distance(); + scale *= 0.05f * Globals.theRenderer.RenderCamera().Distance(); if (modified) { @@ -7220,10 +7032,10 @@ } LA.xformDir(up, ClickInfo.matbuffer, up); // if (!CameraPane.LOCALTRANSFORM) - LA.xformDir(up, info.pane.theRenderer.renderCamera.toScreen, up); + LA.xformDir(up, Globals.theRenderer.RenderCamera().toScreen, up); LA.xformDir(info.camera.away, ClickInfo.matbuffer, away); // if (!CameraPane.LOCALTRANSFORM) - LA.xformDir(away, info.pane.theRenderer.renderCamera.toScreen, away); + LA.xformDir(away, Globals.theRenderer.RenderCamera().toScreen, away); //LA.vecCross(up, cVector.Z, right2); cVector delta = LA.newVector(info.x - startX, startY - info.y, 0); @@ -7281,7 +7093,7 @@ } /**/ - switch (info.pane.renderCamera.viewCode) + switch (info.pane.RenderCamera().viewCode) { case 1: // '\001' LA.matZRotate(toParent, angle); @@ -7337,7 +7149,7 @@ } /**/ - switch (info.pane.renderCamera.viewCode) + switch (info.pane.RenderCamera().viewCode) { case 3: // '\001' if (modified) -- Gitblit v1.6.2