X-Git-Url: http://git.megacz.com/?p=anneal.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fqfat%2FViewer.java;h=89ba7b323c76b2b511875c655a216597c53b75e4;hp=2ec797f5fdf29453a686c98311521efef891a019;hb=2a2e64829786ee415fd0c0f16957c55e174b793b;hpb=f8763e1d5c2936537f981b840e9487ae22ed9ee7 diff --git a/src/edu/berkeley/qfat/Viewer.java b/src/edu/berkeley/qfat/Viewer.java index 2ec797f..89ba7b3 100644 --- a/src/edu/berkeley/qfat/Viewer.java +++ b/src/edu/berkeley/qfat/Viewer.java @@ -80,33 +80,38 @@ public abstract class Viewer implements GLEventListener, MouseListener, MouseMot projection = Matrix.getProjectionMatrix(gl); } - protected void updateVisibility(GL gl, Mesh mesh) { + protected synchronized void updateVisibility(GL gl, Mesh mesh) { Matrix projection = Matrix.getProjectionMatrix(gl); IntBuffer buf = ByteBuffer.allocateDirect(9*4*4).order(ByteOrder.nativeOrder()).asIntBuffer(); + gl.glFlush(); + gl.glDrawBuffer(GL.GL_BACK); + gl.glReadBuffer( GL.GL_BACK ); + gl.glPixelStorei( GL.GL_PACK_ALIGNMENT, 1); + gl.glFlush(); + gl.glDisable(GL.GL_LIGHTING); + gl.glShadeModel(GL.GL_FLAT); gl.glColor3f(0,0,0); gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); - synchronized(this) { - for(Mesh.T t : mesh) t.glTriangle(gl, null); - for(Mesh.Vertex v : mesh.vertices()) { - Point p = v.getPoint(); - gl.glColor3f(1,1,1); + for(Mesh.T t : mesh) t.glTriangle(gl, null); + for(Mesh.Vertex v : mesh.vertices()) { + Point p = v.getPoint(); + gl.glColor3f(1,1,1); + gl.glBegin(gl.GL_POINTS); + p.glVertex(gl); + gl.glEnd(); + gl.glFlush(); + + Point projected = projection.times(p); + 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; + v.visible = vis; + if (vis) { + gl.glColor3f(0,0,0); gl.glBegin(gl.GL_POINTS); p.glVertex(gl); gl.glEnd(); - gl.glFlush(); - - Point projected = projection.times(p); - 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; - v.visible = vis; - if (vis) { - gl.glColor3f(0,0,0); - gl.glBegin(gl.GL_POINTS); - p.glVertex(gl); - gl.glEnd(); - } } } gl.glShadeModel(GL.GL_SMOOTH); @@ -171,7 +176,7 @@ public abstract class Viewer implements GLEventListener, MouseListener, MouseMot Vec delta = d1.plus(clickClosest).minus(closest.getPoint()); //System.out.println(delta + " " + closest.getPoint()); System.out.println(getMouse().minus(clickPoint)); - closest.move(Matrix.translate(delta), true); + closest.move(Matrix.translate(delta), false); } } } else {