- if (i != 1 /*&& i!=4*/) continue;
- Point p = new Point(0, 0, 0).times(m);
- Vec v = new Vec(p.x, p.y, p.z);
- v = v.times((float)1.04);
- gl.glTranslatef(v.x, v.y, v.z);
- draw(gl, false, tile);
- gl.glTranslatef(-v.x, -v.y, -v.z);
+ if (neighborsWireOne && i!=whichNeighbor) continue;
+ if (neighbors) draw(gl, true, safeTriangles, m);
+ else if (neighborsWire || neighborsWireOne) draw(gl, false, safeTriangles, m);
+ }
+
+ gl.glDisable(GL.GL_LIGHTING);
+ gl.glShadeModel(GL.GL_FLAT);
+ if (closest != null) {
+ gl.glColor3f(1,1,1);
+ gl.glBegin(gl.GL_POINTS);
+ closest.getPoint().glVertex(gl);
+ gl.glEnd();
+ }
+
+ 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);
+
+
+ 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;
+ }