private static final void renderReference( final GL gl, final float[] origin, final float[] xAxis, final float[] yAxis, final float[] zAxis) { for (int i = X; i <= Z; ++i) { xAxis[i] = origin[i] + xAxis[i] * AXIS_SCALE; yAxis[i] = origin[i] + yAxis[i] * AXIS_SCALE; zAxis[i] = origin[i] + zAxis[i] * AXIS_SCALE; } gl.glBegin(GL.GL_LINES); { // X axis (red) gl.glColor3f(1, 0, 0); gl.glVertex3fv(origin, 0); gl.glVertex3fv(xAxis, 0); // Y axis (green) gl.glColor3f(0, 1, 0); gl.glVertex3fv(origin, 0); gl.glVertex3fv(yAxis, 0); // Z axis (blue) gl.glColor3f(0, 0, 1); gl.glVertex3fv(origin, 0); gl.glVertex3fv(zAxis, 0); } gl.glEnd(); }
private void renderPin(GL gl, Coordinates position, float[] color, float size) { float height = heightmap.getHeight(projection.getGeoCoordinates(position)); gl.glPushMatrix(); double[] model = new double[16]; gl.glGetDoublev(GL_MODELVIEW_MATRIX, model, 0); double zoomH = 0.1 / Math.sqrt((model[0] * model[0]) + (model[1] * model[1]) + (model[2] * model[2])); double zoomZ = 0.1 / Math.sqrt((model[8] * model[8]) + (model[9] * model[9]) + (model[10] * model[10])); gl.glTranslatef(position.getLongitude(), position.getLatitude(), height); gl.glScaled(zoomH * size, zoomH * size, zoomZ * size); gl.glDisable(GL_TEXTURE_2D); gl.glRotatef(20, 0.3f, 1, 0); GLU glu = new GLU(); GLUquadric quadric = glu.gluNewQuadric(); // glu.gluQuadricNormals(quadric, GLU.GLU_FLAT); gl.glColor3f(0.5f, 0.5f, 0.5f); gl.glEnable(GL_LIGHTING); glu.gluCylinder(quadric, 0.03, 0.03, 0.6f, 5, 1); gl.glTranslatef(0, 0, 0.6f); gl.glColor3f(color[0], color[1], color[2]); gl.glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE); glu.gluSphere(quadric, 0.12, 8, 8); // glu.gluCylinder(quadric, 0.2, 0.1, 0.5, 8, 1); gl.glDisable(GL_LIGHTING); glu.gluDeleteQuadric(quadric); gl.glPopMatrix(); }
/** * Renders the tile to the given context, in the process building all needed resources. * * @param gl */ public void render(GL gl) { projection = ProjectionFactory.getCurrentProjection(); heightmap = State.getInstance().getLoadedHeightmap(); // BUILD TEXTURES IF NECESSARY if (!gl.glIsTexture(textureID)) { textureID = createTexture(gl, getImage(), false); // prerenderToTexture(gl); } if (!gl.glIsTexture(grainTextureID)) { createGrainTexture(gl); } // RENDER TILE FROM DISPLAY LIST, OR ELSE BUILD DISPLAY LIST if (gl.glIsList(displaylistID)) { gl.glCallList(displaylistID); } else { displaylistID = gl.glGenLists(1); gl.glNewList(displaylistID, GL_COMPILE_AND_EXECUTE); gl.glActiveTexture(GL_TEXTURE0); gl.glEnable(GL_TEXTURE_2D); gl.glBindTexture(GL_TEXTURE_2D, grainTextureID); gl.glActiveTexture(GL_TEXTURE1); gl.glEnable(GL_TEXTURE_2D); gl.glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); gl.glBindTexture(GL_TEXTURE_2D, textureID); gl.glColor3f(1, 1, 1); float[] color = new float[3]; float hRes = HEIGHT_RESOLUTION - 1; float stepSize = bounds.getWidth() / hRes; Coordinates pos = new Coordinates(); for (int x = 0; x < hRes; x++) { gl.glBegin(GL_TRIANGLE_STRIP); for (int y = 0; y <= hRes; y++) { for (int i = 0; i < 2; i++) { pos.setLatitude(bounds.getTop() + y * stepSize); pos.setLongitude(bounds.getLeft() + (x + i) * stepSize); gl.glMultiTexCoord2f( GL_TEXTURE0, (x + i) / (float) GRAIN_RESOLUTION, y / (float) GRAIN_RESOLUTION); gl.glMultiTexCoord2f(GL_TEXTURE1, (x + i) / hRes, y / hRes); float height = heights[x + HEIGHT_BORDER + i][y + HEIGHT_BORDER]; getHeightColor(color, height); float shade = getShade(x + i, y, stepSize); gl.glColor3f(color[0] * shade, color[1] * shade, color[2] * shade); gl.glVertex3f(pos.getLongitude(), pos.getLatitude(), height); } } gl.glEnd(); } gl.glDisable(GL_TEXTURE_2D); gl.glActiveTexture(GL_TEXTURE0); renderPOIs(gl); gl.glEndList(); } }
public void display(GL gl, float time, int screenWidth, int screenHeight) { // TODO: most of this only needs to be done once per frame, not per button. if (!visible) { return; } gl.glMatrixMode(GL.GL_MODELVIEW); gl.glPushMatrix(); if (flipx) { gl.glTranslatef(1.0f, 0.0f, 0.0f); gl.glScalef(-1.0f, 1.0f, 1.0f); } if (flipy) { gl.glTranslatef(0.0f, 1.0f, 0.0f); gl.glScalef(1.0f, -1.0f, 1.0f); } gl.glScalef(1.0f / screenWidth, 1.0f / screenHeight, 1.0f); if (isSelected() || (mDown && mOver)) { gl.glColor3f(0.6f, 0.6f, 0.8f); } else { gl.glColor3f(0.8f, 0.8f, 0.8f); } gl.glActiveTexture(GL.GL_TEXTURE0); marble.enable(); marble.bind(); gl.glMatrixMode(GL.GL_TEXTURE); gl.glPushMatrix(); gl.glLoadIdentity(); gl.glBegin(GL.GL_POLYGON); for (int n = 0; n < buttonShape.npoints; n++) { gl.glTexCoord2f(n / 2, (n + n / 2 + 1) % 2); gl.glVertex3f(buttonShape.xpoints[n], buttonShape.ypoints[n], -0.5f); } gl.glEnd(); tex.enable(); tex.bind(); gl.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MIN_FILTER, GL.GL_LINEAR); gl.glBegin(GL.GL_POLYGON); for (int n = 0; n < buttonShape.npoints; n++) { gl.glTexCoord2f(n / 2, (n + n / 2 + 1) % 2); gl.glVertex3f(buttonShape.xpoints[n], buttonShape.ypoints[n], -1.0f); } gl.glEnd(); gl.glPopMatrix(); gl.glMatrixMode(GL.GL_MODELVIEW); gl.glPopMatrix(); }
public final void display(final GLAutoDrawable drawable) { final GL gl = drawable.getGL(); gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); gl.glMatrixMode(GL.GL_MODELVIEW); gl.glLoadIdentity(); this.applyCameraAdjustment(gl); long t = System.currentTimeMillis(); long dt = t - tprec; tprec = t; mdx.update(dt); renderReference(gl, ORIGIN, X_AXIS.clone(), Y_AXIS.clone(), Z_AXIS.clone()); renderReferences(gl); gl.glColor3f(1.0f, 1.0f, 1.0f); int[] temp = selector.getGeoOn(); if (temp != null) { for (int i = 0; i < temp.length; ++i) this.renderNonBlending(mdx.getGeoset(temp[i]), gl); for (int i = 0; i < temp.length; ++i) this.renderBlending(mdx.getGeoset(temp[i]), gl); } }
/** Draws circular particle using a display list. */ public void display(GL gl) { if (PARTICLE_DISPLAY_LIST < 0) { // MAKE DISPLAY LIST: int displayListIndex = gl.glGenLists(1); gl.glNewList(displayListIndex, GL.GL_COMPILE); drawParticle(gl, new Point3d(), radius); // /particle at origin gl.glEndList(); System.out.println("MADE LIST " + displayListIndex + " : " + gl.glIsList(displayListIndex)); PARTICLE_DISPLAY_LIST = displayListIndex; } // / COLOR: DEFAULT WHITE; GREEN IF HIGHLIGHTED; ADD RED IF PINNED Color3f c = new Color3f(1, 1, 1); // default: white if (pin) { c.x = 1f; // add red c.y *= 0.2f; c.z = 0; } if (highlight) { c.y = 1; c.z = 0; } if (GooParticle.class.isInstance(this)) { c.x = 0; c.y = 0; // now its blue } gl.glColor3f(c.x, c.y, c.z); // / DRAW ORIGIN-CIRCLE TRANSLATED TO "p": gl.glPushMatrix(); gl.glTranslated(x.x, x.y, x.z); gl.glCallList(PARTICLE_DISPLAY_LIST); gl.glPopMatrix(); }
public void desenhar(GL gl, GLUT glut) { gl.glShadeModel(GL.GL_FLAT); gl.glNormal3f(0.0f, 0.0f, 1.0f); gl.glColor3f(1f, 1f, 1f); float corWhite[] = {1.0f, 1.0f, 1.0f, 1.0f}; // base setTexture(Util.loadImage("texture/textureBrick.png")); getTexture().enable(); getTexture().bind(); gl.glMaterialfv(GL.GL_FRONT, GL.GL_AMBIENT_AND_DIFFUSE, corWhite, 0); gl.glEnable(GL.GL_LIGHTING); gl.glPushMatrix(); gl.glTranslatef(0f, -dif, 0f); gl.glScalef(getxEscala(), getyEscala(), getzEscala()); glut.glutSolidCube(1f); gl.glPopMatrix(); // esquerda setTexture(Util.loadImage("texture/tijolos/medio2.png")); getTexture().enable(); getTexture().bind(); gl.glPushMatrix(); gl.glTranslatef(-(getxEscala() / 2), (getAltura() / 2) - dif, 0f); gl.glScalef(0.1f, getAltura(), getzEscala()); glut.glutSolidCube(1f); gl.glPopMatrix(); gl.glDisable(GL.GL_LIGHTING); // direita setTexture(Util.loadImage("texture/tijolos/medio2.png")); getTexture().enable(); getTexture().bind(); gl.glPushMatrix(); gl.glTranslatef(getxEscala() / 2, (getAltura() / 2) - dif, 0f); gl.glScalef(0.1f, getAltura(), getzEscala()); glut.glutSolidCube(1f); gl.glPopMatrix(); gl.glDisable(GL.GL_LIGHTING); // fundo setTexture(Util.loadImage("texture/tijolos/fraco.png")); getTexture().enable(); getTexture().bind(); gl.glPushMatrix(); gl.glTranslatef(0f, (getAltura() / 2) - dif, -(getzEscala() / 2)); gl.glScalef(getxEscala(), getAltura(), 0.1f); glut.glutSolidCube(1f); gl.glPopMatrix(); gl.glDisable(GL.GL_LIGHTING); }
public void fire() throws IllegalActionException { if (_debugging) { _debug("Called fire()"); } GL gl = ((GRODirector) getDirector()).getGL(); gl.glBegin(GL.GL_QUADS); gl.glColor3f(0.3f, 0.7f, 0.3f); gl.glVertex3f(-1.0f, 0.0f, 1.0f); gl.glVertex3f(1.0f, 0.0f, 1.0f); gl.glVertex3f(1.0f, 0.0f, -1.0f); gl.glVertex3f(-1.0f, 0.0f, -1.0f); gl.glEnd(); }
public void displayOctree(GL gl, GLU glu) { gl.glDisable(GL.GL_CULL_FACE); gl.glPolygonMode(GL.GL_FRONT_AND_BACK, GL.GL_LINE); for (Octant o : visibleLeaves) { gl.glColor3f(1, 0.5f, 0.5f); o.displayOctant(gl); o.displayOctantInfo(gl, glu); } if (!vizController.getVizConfig().isWireFrame()) { gl.glPolygonMode(GL.GL_FRONT_AND_BACK, GL.GL_FILL); } if (vizController.getVizModel().isCulling()) { gl.glEnable(GL.GL_CULL_FACE); gl.glCullFace(GL.GL_BACK); } }
public void display(GLCanvas canvas) { GL gl = canvas.getGL(); // // render the simulation // try { sim.update(); } catch (Exception e) { Log.println("[Editor] exception in simulation update/calculate paths: " + e.getMessage()); e.printStackTrace(); } renderer.render(sim, canvas); // // render the grid // gl.glColor4f(0.4f, 0.4f, 0.4f, 0.4f); gl.glEnable(GL.GL_BLEND); gl.glBegin(GL.GL_LINES); for (int x = 0; x < 100; x++) { gl.glVertex2f( -50 * Constants.PLANET_MAX_SIZE * 4 + x * Constants.PLANET_MAX_SIZE * 4, -50 * Constants.PLANET_MAX_SIZE * 4); gl.glVertex2f( -50 * Constants.PLANET_MAX_SIZE * 4 + x * Constants.PLANET_MAX_SIZE * 4, 50 * Constants.PLANET_MAX_SIZE * 4); } for (int x = 0; x < 100; x++) { gl.glVertex2f( -50 * Constants.PLANET_MAX_SIZE * 4, -50 * Constants.PLANET_MAX_SIZE * 4 + x * Constants.PLANET_MAX_SIZE * 4); gl.glVertex2f( +50 * Constants.PLANET_MAX_SIZE * 4, -50 * Constants.PLANET_MAX_SIZE * 4 + x * Constants.PLANET_MAX_SIZE * 4); } gl.glDisable(GL.GL_BLEND); gl.glEnd(); // // render rectangle selection // if (drag_start != null && drag_end != null && selected_planets.size() == 0) { gl.glLineWidth(2); gl.glColor4f(1, 1, 1, 1); Widget.renderOutlinedQuad( drag_start.x, drag_start.y, drag_end.x - drag_start.x, -(drag_end.y - drag_start.y)); gl.glLineWidth(1); } // // render reference system // gl.glColor3f(1, 1, 1); gl.glBegin(GL.GL_LINES); gl.glColor3f(1, 0, 0); gl.glVertex2f(Constants.PLANET_MAX_SIZE * 50, 0); gl.glVertex2f(-Constants.PLANET_MAX_SIZE * 50, 0); gl.glColor3f(0, 1, 0); gl.glVertex2f(0, Constants.PLANET_MAX_SIZE * 50); gl.glVertex2f(0, -Constants.PLANET_MAX_SIZE * 50); gl.glEnd(); try { Thread.sleep(5); } catch (InterruptedException e) { } // // check mouse over planet // if (sim.getPlanet( renderer.getCamera().getScreenToWorldX(mouse_pos.x), renderer.getCamera().getScreenToWorldY(mouse_pos.y)) != null && !this.wasGuiIntersected(mouse_pos.x, mouse_pos.y) && drag_start != null) for (WorldAlignementContainer cont : conts) cont.setVisible(false); else for (WorldAlignementContainer cont : conts) cont.setVisible(true); }
public void display(GLAutoDrawable glDrawable) { GL gl = glDrawable.getGL(); // Store old matrices gl.glMatrixMode(GL.GL_MODELVIEW); gl.glPushMatrix(); gl.glLoadIdentity(); gl.glMatrixMode(GL.GL_PROJECTION); gl.glPushMatrix(); gl.glLoadIdentity(); gl.glViewport(0, 0, glDrawable.getWidth(), glDrawable.getHeight()); // Store enabled state and disable lighting, texture mapping and the depth buffer gl.glPushAttrib(GL.GL_ENABLE_BIT); gl.glDisable(GL.GL_BLEND); gl.glDisable(GL.GL_LIGHTING); gl.glDisable(GL.GL_TEXTURE_2D); gl.glDisable(GL.GL_DEPTH_TEST); // Retrieve the current viewport and switch to orthographic mode IntBuffer viewPort = BufferUtil.newIntBuffer(4); gl.glGetIntegerv(GL.GL_VIEWPORT, viewPort); glu.gluOrtho2D(0, viewPort.get(2), viewPort.get(3), 0); // Render the text gl.glColor3f(1, 1, 1); int x = OFFSET; int maxx = 0; int y = OFFSET + CHAR_HEIGHT; if (keyboardEntries.size() > 0) { gl.glRasterPos2i(x, y); glut.glutBitmapString(GLUT.BITMAP_HELVETICA_12, KEYBOARD_CONTROLS); maxx = Math.max( maxx, OFFSET + glut.glutBitmapLength(GLUT.BITMAP_HELVETICA_12, KEYBOARD_CONTROLS)); y += OFFSET; x += INDENT; for (int i = 0; i < keyboardEntries.size(); i++) { gl.glRasterPos2f(x, y); String text = (String) keyboardEntries.get(i); glut.glutBitmapString(GLUT.BITMAP_HELVETICA_12, text); maxx = Math.max(maxx, OFFSET + glut.glutBitmapLength(GLUT.BITMAP_HELVETICA_12, text)); y += OFFSET; } } if (mouseEntries.size() > 0) { x = maxx + OFFSET; y = OFFSET + CHAR_HEIGHT; gl.glRasterPos2i(x, y); glut.glutBitmapString(GLUT.BITMAP_HELVETICA_12, MOUSE_CONTROLS); y += OFFSET; x += INDENT; for (int i = 0; i < mouseEntries.size(); i++) { gl.glRasterPos2f(x, y); glut.glutBitmapString(GLUT.BITMAP_HELVETICA_12, (String) mouseEntries.get(i)); y += OFFSET; } } // Restore enabled state gl.glPopAttrib(); // Restore old matrices gl.glPopMatrix(); gl.glMatrixMode(GL.GL_MODELVIEW); gl.glPopMatrix(); }
public void display(GLAutoDrawable drawable) { GL gl = drawable.getGL(); gl.glClear(GL.GL_COLOR_BUFFER_BIT); gl.glClear(GL.GL_DEPTH_BUFFER_BIT); gl.glLoadIdentity(); gl.glTranslatef(0.0f, 0.0f, -5.0f); // Front Of House gl.glBegin(GL.GL_QUADS); gl.glColor3f(1.0f, 0.0f, 0.0f); gl.glVertex3f(-1.0f, 1.0f, 0.0f); gl.glVertex3f(1.0f, 1.0f, 0.0f); gl.glVertex3f(1.0f, -1.0f, 0.0f); gl.glVertex3f(-1.0f, -1.0f, 0.0f); gl.glEnd(); // Front Left Window gl.glBegin(GL.GL_QUADS); gl.glColor3f(0.5f, 0.0f, 0.0f); gl.glVertex3f(-0.75f, 0.25f, 0.0f); gl.glVertex3f(-0.25f, 0.25f, 0.0f); gl.glVertex3f(-0.25f, 0.75f, 0.0f); gl.glVertex3f(-0.75f, 0.75f, 0.0f); gl.glEnd(); // Front Right Window gl.glBegin(GL.GL_QUADS); gl.glColor3f(0.5f, 0.0f, 0.0f); gl.glVertex3f(0.75f, 0.25f, 0.0f); gl.glVertex3f(0.25f, 0.25f, 0.0f); gl.glVertex3f(0.25f, 0.75f, 0.0f); gl.glVertex3f(0.75f, 0.75f, 0.0f); gl.glEnd(); // Door gl.glBegin(GL.GL_QUADS); gl.glColor3f(0.0f, 1.0f, 0.0f); gl.glVertex3f(-0.25f, -1.0f, 0.0f); gl.glVertex3f(0.25f, -1.0f, 0.0f); gl.glVertex3f(0.25f, -0.25f, 0.0f); gl.glVertex3f(-0.25f, -0.25f, 0.0f); gl.glEnd(); // Right Side of house gl.glBegin(GL.GL_QUADS); gl.glColor3f(1.0f, 0.0f, 0.0f); gl.glVertex3f(1.0f, -1.0f, 0.0f); gl.glVertex3f(2.0f, -1.0f, -1.0f); gl.glVertex3f(2.0f, 1.0f, -1.0f); gl.glVertex3f(1.0f, 1.0f, 0.0f); gl.glEnd(); // Right Side of roof gl.glBegin(GL.GL_QUADS); gl.glColor3f(1.0f, 0.0f, 0.0f); gl.glVertex3f(1.0f, 1.0f, 0.0f); gl.glVertex3f(2.0f, 1.0f, -1.0f); gl.glVertex3f(1.0f, 1.75f, -1.0f); gl.glVertex3f(0.0f, 2.0f, -1.0f); gl.glEnd(); // Roof gl.glBegin(GL.GL_TRIANGLES); gl.glColor3f(1.0f, 0.0f, 0.0f); gl.glVertex3f(-1.0f, 1.0f, 0.0f); gl.glVertex3f(0.0f, 2.0f, -1.0f); gl.glVertex3f(1.0f, 1.0f, 0.0f); gl.glEnd(); // Front Side Of House Outline gl.glBegin(GL.GL_LINE_STRIP); gl.glColor3f(0.0f, 0.0f, 1.0f); gl.glVertex3f(-1.0f, 1.0f, 0.0f); gl.glVertex3f(1.0f, 1.0f, 0.0f); gl.glVertex3f(1.0f, -1.0f, 0.0f); gl.glVertex3f(-1.0f, -1.0f, 0.0f); gl.glEnd(); // Right Side of house outline gl.glBegin(GL.GL_LINE_STRIP); gl.glColor3f(0.0f, 0.0f, 1.0f); gl.glVertex3f(1.0f, -1.0f, 0.0f); gl.glVertex3f(2.0f, -1.0f, -1.0f); gl.glVertex3f(2.0f, 1.0f, -1.0f); gl.glVertex3f(1.0f, 1.0f, 0.0f); gl.glEnd(); // Roof Outline gl.glBegin(GL.GL_LINE_STRIP); gl.glColor3f(0.0f, 0.0f, 1.0f); gl.glVertex3f(-1.0f, 1.0f, 0.0f); gl.glVertex3f(0.0f, 2.0f, -1.0f); gl.glVertex3f(1.0f, 1.0f, 0.0f); gl.glEnd(); // Right Side of roof Outline gl.glBegin(GL.GL_LINE_STRIP); gl.glColor3f(0.0f, 0.0f, 1.0f); gl.glVertex3f(1.0f, 1.0f, 0.0f); gl.glVertex3f(2.0f, 1.0f, -1.0f); gl.glVertex3f(1.0f, 1.75f, -1.0f); gl.glVertex3f(0.0f, 2.0f, -1.0f); gl.glEnd(); }
/** * Render the geometry now. * * @param gl The GL context to render with */ public void render(GL gl) { gl.glBegin(GL.GL_LINES); gl.glColor3f(0, 0, 1); gl.glVertex3f(minBounds[0], minBounds[1], minBounds[2]); gl.glVertex3f(minBounds[0], minBounds[1], maxBounds[2]); gl.glVertex3f(minBounds[0], minBounds[1], minBounds[2]); gl.glVertex3f(minBounds[0], maxBounds[1], minBounds[2]); gl.glVertex3f(minBounds[0], minBounds[1], minBounds[2]); gl.glVertex3f(maxBounds[0], minBounds[1], minBounds[2]); gl.glVertex3f(maxBounds[0], maxBounds[1], maxBounds[2]); gl.glVertex3f(maxBounds[0], maxBounds[1], minBounds[2]); gl.glVertex3f(maxBounds[0], maxBounds[1], maxBounds[2]); gl.glVertex3f(maxBounds[0], minBounds[1], maxBounds[2]); gl.glVertex3f(maxBounds[0], maxBounds[1], maxBounds[2]); gl.glVertex3f(minBounds[0], maxBounds[1], maxBounds[2]); gl.glVertex3f(minBounds[0], minBounds[1], maxBounds[2]); gl.glVertex3f(minBounds[0], maxBounds[1], maxBounds[2]); gl.glVertex3f(minBounds[0], minBounds[1], maxBounds[2]); gl.glVertex3f(maxBounds[0], minBounds[1], maxBounds[2]); gl.glVertex3f(minBounds[0], maxBounds[1], maxBounds[2]); gl.glVertex3f(minBounds[0], maxBounds[1], minBounds[2]); gl.glVertex3f(maxBounds[0], maxBounds[1], minBounds[2]); gl.glVertex3f(minBounds[0], maxBounds[1], minBounds[2]); gl.glVertex3f(maxBounds[0], maxBounds[1], minBounds[2]); gl.glVertex3f(maxBounds[0], minBounds[1], minBounds[2]); gl.glVertex3f(maxBounds[0], minBounds[1], minBounds[2]); gl.glVertex3f(maxBounds[0], minBounds[1], maxBounds[2]); gl.glEnd(); if (showParent) { gl.glPopMatrix(); gl.glBegin(GL.GL_LINES); gl.glColor3f(1, 0, 1); gl.glVertex3f(minBox[0], minBox[1], minBox[2]); gl.glVertex3f(minBox[0], minBox[1], maxBox[2]); gl.glVertex3f(minBox[0], minBox[1], minBox[2]); gl.glVertex3f(minBox[0], maxBox[1], minBox[2]); gl.glVertex3f(minBox[0], minBox[1], minBox[2]); gl.glVertex3f(maxBox[0], minBox[1], minBox[2]); gl.glVertex3f(maxBox[0], maxBox[1], maxBox[2]); gl.glVertex3f(maxBox[0], maxBox[1], minBox[2]); gl.glVertex3f(maxBox[0], maxBox[1], maxBox[2]); gl.glVertex3f(maxBox[0], minBox[1], maxBox[2]); gl.glVertex3f(maxBox[0], maxBox[1], maxBox[2]); gl.glVertex3f(minBox[0], maxBox[1], maxBox[2]); gl.glVertex3f(minBox[0], minBox[1], maxBox[2]); gl.glVertex3f(minBox[0], maxBox[1], maxBox[2]); gl.glVertex3f(minBox[0], minBox[1], maxBox[2]); gl.glVertex3f(maxBox[0], minBox[1], maxBox[2]); gl.glVertex3f(minBox[0], maxBox[1], maxBox[2]); gl.glVertex3f(minBox[0], maxBox[1], minBox[2]); gl.glVertex3f(maxBox[0], maxBox[1], minBox[2]); gl.glVertex3f(minBox[0], maxBox[1], minBox[2]); gl.glVertex3f(maxBox[0], maxBox[1], minBox[2]); gl.glVertex3f(maxBox[0], minBox[1], minBox[2]); gl.glVertex3f(maxBox[0], minBox[1], minBox[2]); gl.glVertex3f(maxBox[0], minBox[1], maxBox[2]); gl.glEnd(); // Push it back down again as the next call after this will pop it gl.glPushMatrix(); } }
public void prerenderToTexture(GL gl) { int texSize = 256; final int[] tmp = new int[1]; gl.glGenTextures(1, tmp, 0); textureID = tmp[0]; gl.glBindTexture(GL_TEXTURE_2D, textureID); gl.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); gl.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); gl.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); gl.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); gl.glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, texSize, texSize, 0, GL_BGRA, GL_UNSIGNED_BYTE, null); final int[] fbo = new int[1]; gl.glGenFramebuffersEXT(1, IntBuffer.wrap(fbo)); gl.glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo[0]); gl.glFramebufferTexture2DEXT( GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, textureID, 0); gl.glDrawBuffers(1, IntBuffer.wrap(new int[] {GL_COLOR_ATTACHMENT0_EXT})); final int[] rba = new int[1]; gl.glGenRenderbuffersEXT(1, IntBuffer.wrap(rba)); gl.glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, rba[0]); gl.glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT, texSize, texSize); gl.glFramebufferRenderbufferEXT( GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, rba[0]); gl.glPushMatrix(); gl.glLoadIdentity(); gl.glPushAttrib(GL_VIEWPORT_BIT); gl.glViewport(0, 0, texSize, texSize); gl.glMatrixMode(GL.GL_PROJECTION); gl.glPushMatrix(); gl.glLoadIdentity(); gl.glOrtho(0, texSize, 0, texSize, 0, 10); gl.glMatrixMode(GL.GL_MODELVIEW); Set<MapElement> map = State.getInstance().getMapInfo().queryElements(detailLevel, bounds, true); gl.glDisable(GL_TEXTURE_2D); gl.glColor3f(1, 1, 1); for (MapElement element : map) { if (element instanceof Street) { drawLine( gl, ((Street) element).getDrawingSize() / (float) Projection.getZoomFactor(detailLevel), ((Street) element).getNodes()); } } gl.glColor3f(0.3f, 0.3f, 0.3f); for (MapElement element : map) { if ((element instanceof Area) && (((Area) element).getWayInfo().isBuilding())) { gl.glBegin(GL_POLYGON); for (Node node : ((Area) element).getNodes()) { Coordinates pos = getLocalCoordinates(node.getPos()); gl.glVertex3f(pos.getLongitude(), pos.getLatitude(), 0f); } gl.glEnd(); } } gl.glEnable(GL_TEXTURE_2D); gl.glMatrixMode(GL.GL_PROJECTION); gl.glPopMatrix(); gl.glMatrixMode(GL.GL_MODELVIEW); gl.glPopAttrib(); gl.glPopMatrix(); gl.glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); gl.glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, 0); gl.glDeleteFramebuffersEXT(1, fbo, 0); gl.glDeleteRenderbuffersEXT(1, rba, 0); }