Dialogboks
Grafikk
Børre Stenseth
Å tegne:>4 klosser

Å tegne en enkel scene

Hva

Planlegging av en scene og uttegning av noen klosser. Bruk av matrisestacken og rotasjon av en scene

Vi tar utgangspunkt klossen vi lagde i Kloss. Vi skal lage tre klosser basert på en bordplate som også er en kloss. Vi skal gjøre dette ved å gjenbruke kloss-klassen 4 ganger.

screen1

Vi planlegger scenen med øye (kamera) og lys slik:

klosser

De tre klossene har samme størrelse (2,1,1), og de har alle sine kanter parallellt med koordinataksene. I tillegg skal vi ha en bordplate. Sett i xz-projeksjon:

klosser2

Vi vil framstille denne scenen med en hvit bakgrunn

Uttegningen av scenen blir slik:

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

merk at materialene er administrert med en egen klasse:

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

Klosser i VRML

(En digresjon)

Vi kan beskrive denne enkle scenen i VRML(Virtual Reality Modelling Languge) slik: boxes.wrl

Du kan se en slik konstruksjon skrevet i VRML dersom du har forberedt nettleseren for dette med en plugin: Bokser som VRML.

Du kan laste ned Octaga som er en VRML/X3D leser/plugin fra Octaga.com [1] eller du kan finne en annen her: VRML Plugin and Browser Detector: [2]

VRML (Virtual Reality Modelling Languge) er ikke tema i denne modulen, og modellen beskrives ikke nærmere.

kode

Programmet(JOGL/Netbeans): https://svnit.hiof.no/svn/psource/JOGL/boxes

Referanser
  1. OctagaOctagawww.octaga.com/14-04-2010
  1. VRML/X3D players and pluginscic.nist.gov/vrml/vbdetect.html14-03-2009
Vedlikehold

B.Stenseth, april 2009

Å tegne:>4 klosser
til toppen