Beispiel #1
0
  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();
  }
Beispiel #2
0
  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();
  }
Beispiel #3
0
  /**
   * 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();
    }
  }
Beispiel #4
0
  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();
  }
Beispiel #5
0
  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);
    }
  }
Beispiel #6
0
  /** 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();
  }
Beispiel #7
0
  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);
  }
Beispiel #8
0
 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);
    }
  }
Beispiel #10
0
  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);
  }
Beispiel #11
0
  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();
  }
Beispiel #12
0
  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();
    }
  }
Beispiel #14
0
  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);
  }