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;
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);
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;
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;
- }
- }
}
}
}