Dialogboks
Computer Graphics
Børre Stenseth
JOGL>4 boxes

Drawing a simple scene.

What

We will a scene based on the box we introduced in Draw a box, three boxes on a table. We will draw the scene by repeating the box 4 times:

screen1

We plan the scene, with eye (camera) and lightning like this.

klosser

The three boxes has same size (2,1,1), and they have their sides paralell to the coordinate axes. In addition we will draw the table. Seen in XZ-projection:

klosser2

We will draw this scene with white background.

The rendering of the scene is like this:

public void display(GLAutoDrawable drawable)
{
    GL gl = drawable.getGL();
    GLU glu = new GLU(); // needed for lookat
    // Clear the drawing area
    gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
    // Reset the current matrix to the "identity"
    gl.glMatrixMode(GL.GL_MODELVIEW);
    gl.glLoadIdentity();
    glu.gluLookAt(-4.0f,-5.0f,6.0f,// eye
                  0.0f,0.0f,0.0f,  // looking at
                  0.0f,0.0f,1.0f   // is up
                );
    //////////////////////////////////
    // bring construction in position
    gl.glRotatef(view_rotx,1.0f,0.0f,0.0f);
    // rotate around y-axis
    gl.glRotatef(view_roty,0.0f,0.0f,1.0f);
    /////////////////////////////
    // Draw the construction
    // draw the "table"
    // set material for table
    someMaterials.setGreenPlastic(gl);
    gl.glPushMatrix();
    gl.glTranslatef(-3.5f,-1.0f,-0.11f);
    gl.glScalef(7.0f,3.0f,0.1f);
    oneBox.drawMe(gl);
    gl.glPopMatrix();
    // set material for boxes
    someMaterials.setRedBox(gl);
    // the first box
    gl.glPushMatrix();
    gl.glTranslatef(-2.5f,0.0f,0.0f);
    gl.glScalef(2.0f,1.0f,1.0f);
    oneBox.drawMe(gl);
    gl.glPopMatrix();
    // the second box
    gl.glPushMatrix();
    gl.glTranslatef(0.5f,0.0f,0.0f);
    gl.glScalef(2.0f,1.0f,1.0f);
    oneBox.drawMe(gl);
    gl.glPopMatrix();
    // the box on top
    gl.glTranslatef(-1.0f,0.0f,1.0f);
    gl.glScalef(2.0f,1.0f,1.0f);
    oneBox.drawMe(gl);
    // End draw the construction
    /////////////////////////////
    gl.glFlush();
}

Note that materials are administrated by a simple class:

package boxes;
import javax.media.opengl.GL;
/**
 *
 * @author borres
 */
public class someMaterials {
    static void setGreenPlastic(GL gl)
    {
        //Green plastic
        float[] ambient ={ 0.0f,0.0f,0.0f,1.0f };
        float[] diffuse ={ 0.1f,0.35f,0.1f,1.0f};
        float[] specular ={0.45f,0.55f,0.45f,1.0f };
        float shine = 32.0f ;
        gl.glMaterialfv(GL.GL_FRONT,GL.GL_AMBIENT,ambient,0);
        gl.glMaterialfv(GL.GL_FRONT,GL.GL_DIFFUSE,diffuse,0);
        gl.glMaterialfv(GL.GL_FRONT,GL.GL_SPECULAR, specular, 0);
        gl.glMaterialf (GL.GL_FRONT,GL.GL_SHININESS,shine);
    }
    static void setRedBox(GL gl)
    {
        //rubin
        float[] ambient ={ 0.1745f, 0.01175f, 0.01175f, 0.55f };
        float[] diffuse ={0.61424f, 0.04136f, 0.04136f, 0.55f };
        float[] specular ={0.727811f, 0.626959f, 0.626959f, 0.55f };
        float shine =76.8f ;
        gl.glMaterialfv(GL.GL_FRONT,GL.GL_AMBIENT,ambient,0);
        gl.glMaterialfv(GL.GL_FRONT,GL.GL_DIFFUSE,diffuse,0);
        gl.glMaterialfv(GL.GL_FRONT,GL.GL_SPECULAR,specular, 0);
        gl.glMaterialf (GL.GL_FRONT,GL.GL_SHININESS,shine);
    }
}

Boxes in VRML

You can see the construction written in VRML(>Virtual Reality Modelling Languge) if you have prepared your browser with a proper plugin: Bokser som VRML.

You can download Octaga [1] that is a VRML/X3D reader/plugin from Octaga, or you can find an other here: [2] VRML (Virtual Reality Modelling Languge) is not a theme in this module and the module is not described in more detail

The file boxes.wrl look like this: boxes.wrl

  • The program project: https://svnit.hiof.no/svn/psource/JOGL/boxes
References
  1. Octaga VRML- pluginwww.octaga.com/joomla/index.php14-03-2009
  1. VRML/X3D players and pluginscic.nist.gov/vrml/vbdetect.html14-03-2009
Maintainance

B.Stenseth, april 2009

JOGL>4 boxes
til toppen