From: adam Date: Mon, 30 Jun 2008 00:20:06 +0000 (-0700) Subject: checkpoint X-Git-Url: http://git.megacz.com/?p=anneal.git;a=commitdiff_plain;h=f8763e1d5c2936537f981b840e9487ae22ed9ee7 checkpoint darcs-hash:20080630002006-5007d-db38724a1f150150a60ca6f81b5af4601792aefd.gz --- diff --git a/src/edu/berkeley/qfat/MeshViewer.java b/src/edu/berkeley/qfat/MeshViewer.java index aea2799..73f22fb 100644 --- a/src/edu/berkeley/qfat/MeshViewer.java +++ b/src/edu/berkeley/qfat/MeshViewer.java @@ -126,6 +126,24 @@ public class MeshViewer extends Viewer { gl.glDisable(GL.GL_LIGHTING); gl.glShadeModel(GL.GL_FLAT); + + updateVisibility(gl, tile); + + Matrix projection = Matrix.getProjectionMatrix(gl); + double dist = Double.MAX_VALUE; + if (clickPoint != null) return; + closest = null; + for(Mesh.Vertex v : tile.vertices()) { + if (!v.visible) continue; + Point p = projection.times(v.getPoint()); + int x = (int)p.x; + int y = (int)p.y; + y = glcanvas.getHeight()-y; + if (closest==null || (x-mousex)*(x-mousex)+(y-mousey)*(y-mousey) < dist) { + dist = (x-mousex)*(x-mousex)+(y-mousey)*(y-mousey); + closest = v; + } + } } diff --git a/src/edu/berkeley/qfat/Viewer.java b/src/edu/berkeley/qfat/Viewer.java index b879650..2ec797f 100644 --- a/src/edu/berkeley/qfat/Viewer.java +++ b/src/edu/berkeley/qfat/Viewer.java @@ -14,11 +14,12 @@ import edu.berkeley.qfat.geom.Point; public abstract class Viewer implements GLEventListener, MouseListener, MouseMotionListener, KeyListener, MouseWheelListener { Mesh.Vertex closest = null; - Matrix projection = null; public Mesh tile = new Mesh(false); public Mesh goal = new Mesh(false); + private Matrix projection = null; + JFrame f; GLCanvas glcanvas; Point clickPoint = null; @@ -76,19 +77,16 @@ public abstract class Viewer implements GLEventListener, MouseListener, MouseMot public final void display(GLAutoDrawable drawable) { GL gl = drawable.getGL(); _display(drawable, gl); - this.projection = Matrix.getProjectionMatrix(gl); - updateVisibility(gl, tile); + projection = Matrix.getProjectionMatrix(gl); } - private void updateVisibility(GL gl, Mesh mesh) { + protected void updateVisibility(GL gl, Mesh mesh) { + Matrix projection = Matrix.getProjectionMatrix(gl); IntBuffer buf = ByteBuffer.allocateDirect(9*4*4).order(ByteOrder.nativeOrder()).asIntBuffer(); gl.glColor3f(0,0,0); gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); - double dist = Double.MAX_VALUE; - if (clickPoint==null) closest = null; synchronized(this) { - for(Mesh.T t : mesh) - t.glTriangle(gl, null); + for(Mesh.T t : mesh) t.glTriangle(gl, null); for(Mesh.Vertex v : mesh.vertices()) { Point p = v.getPoint(); gl.glColor3f(1,1,1); @@ -98,9 +96,7 @@ public abstract class Viewer implements GLEventListener, MouseListener, MouseMot gl.glFlush(); Point projected = projection.times(p); - int x = (int)projected.x; - int y = (int)projected.y; - gl.glReadPixels(x-1, y-1, 3, 3, gl.GL_RGB, gl.GL_UNSIGNED_BYTE, buf); + gl.glReadPixels((int)projected.x-1, (int)projected.y-1, 3, 3, gl.GL_RGB, gl.GL_UNSIGNED_BYTE, buf); boolean vis = false; for(int j=0; j<9*4; j++) vis |= buf.get(j)!=0; @@ -110,13 +106,6 @@ public abstract class Viewer implements GLEventListener, MouseListener, MouseMot gl.glBegin(gl.GL_POINTS); p.glVertex(gl); gl.glEnd(); - y = glcanvas.getHeight()-y; - if (clickPoint==null) { - if (closest==null || (x-mousex)*(x-mousex)+(y-mousey)*(y-mousey) < dist) { - dist = (x-mousex)*(x-mousex)+(y-mousey)*(y-mousey); - closest = v; - } - } } } }