Dialogboks
Børre Stenseth
Å tegne:>4 klosser

Å tegne en enkel scene

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

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.

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 VRML1Virtual 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.

  1. Virtual Reality Modelling Languge
Referanser
  1. OctagaOctagawww.octaga.com/14-04-2010
  1. VRML/X3D players and pluginscic.nist.gov/vrml/vbdetect.html14-03-2009
  • programmet(JOGL/Netbeans): https://svn.hiof.no/svn/psource/JOGL/boxes
Vedlikehold

B.Stenseth, april 2009

(Velkommen) Å tegne:>4 klosser (Planetarium)