Dialogboks
Børre Stenseth
JOGL>Draw a box

Drawing a box with JOGL

What
Drawing a simple 3D box as 6 surfaces

We will draw a simple green box with some different setups.

We will draw a simple box, and we need a function to draw it. If we "unfold" the box:

kloss

We will have to draw the 6 surfaces F1..F6. We must be consistent when we decide waht is inside the box and what is outside. OpenGL will use this during light calculation and we may assign different material to ouside and inside, GL_FRONT and GL_BACK in OpenGL. In this case we shall drw a closed object and we will consentrate on the outside. We will systematically draw the surfaces clockwise when we look at the surface from outside.

We can then describe the surfaces lik this:

F1: adcb F4: fcde
F2. abgh F5: ahed
F3: gfeh F6: bcfg

We must also decide what we will do with the size of the box.

We may either let the dimensions of the box be parameters in a drawBox-method, or we can draw a standard-size bok and leave the sizing to OpenGL-transformations.

We will go for the latter solution, and we must decide the size of a standard box. We decide that the box should have dimension 1, in all directions, and we draw the box with one corner in origo. Thus the coordinates are:

a: 0,0,0 e: 1,0,1
b: 0,1,0 f: 1,1,1
c: 0,1,1 g: 1,1,0
d: 0,0,1 h: 1,0,0

We wrap the boxdrawing in class, so we can reuse easily:

public class oneBox
{
    static void drawMe(GL gl)
    {
      /* draws the sides of a unit cube (0,0,0)-(1,1,1) */
      gl.glBegin(GL.GL_POLYGON);/* f1: front */
        gl.glNormal3f(-1.0f,0.0f,0.0f);
        gl.glVertex3f(0.0f,0.0f,0.0f);
        gl.glVertex3f(0.0f,0.0f,1.0f);
        gl.glVertex3f(1.0f,0.0f,1.0f);
        gl.glVertex3f(1.0f,0.0f,0.0f);
      gl.glEnd();
      gl.glBegin(GL.GL_POLYGON);/* f2: bottom */
        gl.glNormal3f(0.0f,0.0f,-1.0f);
        gl.glVertex3f(0.0f,0.0f,0.0f);
        gl.glVertex3f(1.0f,0.0f,0.0f);
        gl.glVertex3f(1.0f,1.0f,0.0f);
        gl.glVertex3f(0.0f,1.0f,0.0f);
      gl.glEnd();
      gl.glBegin(GL.GL_POLYGON);/* f3:back */
        gl.glNormal3f(1.0f,0.0f,0.0f);
        gl.glVertex3f(1.0f,1.0f,0.0f);
        gl.glVertex3f(1.0f,1.0f,1.0f);
        gl.glVertex3f(0.0f,1.0f,1.0f);
        gl.glVertex3f(0.0f,1.0f,0.0f);
      gl.glEnd();
      gl.glBegin(GL.GL_POLYGON);/* f4: top */
        gl.glNormal3f(0.0f,0.0f,1.0f);
        gl.glVertex3f(1.0f,1.0f,1.0f);
        gl.glVertex3f(1.0f,0.0f,1.0f);
        gl.glVertex3f(0.0f,0.0f,1.0f);
        gl.glVertex3f(0.0f,1.0f,1.0f);
      gl.glEnd();
      gl.glBegin(GL.GL_POLYGON);/* f5: left */
        gl.glNormal3f(0.0f,1.0f,0.0f);
        gl.glVertex3f(0.0f,0.0f,0.0f);
        gl.glVertex3f(0.0f,1.0f,0.0f);
        gl.glVertex3f(0.0f,1.0f,1.0f);
        gl.glVertex3f(0.0f,0.0f,1.0f);
      gl.glEnd();
      gl.glBegin(GL.GL_POLYGON);/* f6: right */
        gl.glNormal3f(0.0f,-1.0f,0.0f);
        gl.glVertex3f(1.0f,0.0f,0.0f);
        gl.glVertex3f(1.0f,0.0f,1.0f);
        gl.glVertex3f(1.0f,1.0f,1.0f);
        gl.glVertex3f(1.0f,1.0f,0.0f);
      gl.glEnd();
    }
}

Minimal version

We make a minimal display without any interaction. The template is NetBeans javaproject: JOGL Application.

The complete code of the one and only codefile (in addition to oneBox) is:

_Box1.java

Mousing around

We introduce interaction by pointing the mouse in the canvas. We use the same template but adds MouseListener and MouseMotionListener.

The complete code of the one and only codefile (in addition to oneBox)is:

_Box2.java

Pulling the handles

We introduce interaction by sliders on the frame. This project is built with template NetBeans javaproject: JOGL Application (Form Designer, GL_JPanel)

Part of the main class:

_Box3.java

The complete code in GLrenderer is:

_GLRenderer.java
References
  • Minimal: https://svn.hiof.no/svn/psource/JOGL/box1
  • Mousing: https://svn.hiof.no/svn/psource/JOGL/box2
  • Handles: https://svn.hiof.no/svn/psource/JOGL/box3
Maintainance

B.Stenseth, april 2009

(Welcome) JOGL>Draw a box (4 boxes)