Computer Graphics

3D Viewing Sample Programs

 

Perspective Projection

Special Case -- zvp = zp = 0

 

 

 

 

xprp=0.0

yprp=0.0

zprp=-3.0

xprp=1.0

yprp=0.0

zprp=-3.0

xprp=1.5

yprp=0.5

zprp=-3.0

 

 

import java.awt.*;

import java.awt.event.*;

 

import net.java.games.jogl.*;

 

 

public class Cube3

{

 

static class Renderer implements GLEventListener,KeyListener

{

private float rquad = 0.0f;

public void display(GLDrawable gLDrawable)

{

final GL gl = gLDrawable.getGL();

gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);

gl.glMatrixMode(GL.GL_MODELVIEW);

gl.glLoadIdentity();

float [][] cube = { {1.0f, 1.0f,1.0f},{-1.0f, 1.0f, 1.0f},

{-1.0f, 1.0f, 3.0f},{1.0f, 1.0f, 3.0f},

{1.0f,-1.0f, 3.0f},{-1.0f,-1.0f, 3.0f},

{-1.0f,-1.0f,1.0f},{1.0f,-1.0f,1.0f}};

float [][] cuber = new float [8][2];

float xprp=1.5f;

float yprp=1.5f;

float zprp=-3.0f;

// Perspective Projection

for (int i =0; i<8;i++){

cuber[i][0] = cube[i][0] - cube[i][2]*((cube[i][0]-xprp)/(cube[i][2]-zprp));

cuber[i][1] = cube[i][1] - cube[i][2]*((cube[i][1]-yprp)/(cube[i][2]-zprp));

System.out.println(i+" "+cuber[i][0]+" "+cuber[i][1]);

}

gl.glLineWidth (2.0f);

gl.glBegin(GL.GL_LINES);

gl.glColor3f(0.0f,1.0f,0.0f); // Set The Color To Green

gl.glVertex2fv(cuber[0]); // Top Right Of The Quad (Top), 0

gl.glVertex2fv(cuber[1]); // Top Left Of The Quad (Top), 1

gl.glVertex2fv(cuber[1]); // Top Left Of The Quad (Top), 1

gl.glVertex2fv(cuber[2]); // Bottom Left Of The Quad (Top), 2

gl.glVertex2fv(cuber[2]); // Bottom Left Of The Quad (Top), 2

gl.glVertex2fv( cuber[3]); // Bottom Right Of The Quad (Top), 3

gl.glVertex2fv(cuber[3]); // Bottom Right Of The Quad (Top), 3

gl.glVertex2fv(cuber[0]); // Top Right Of The Quad (Top), 0

gl.glColor3f(1.0f,0.5f,0.0f); // Set The Color To Orange

gl.glVertex2fv( cuber[4]); // Top Right Of The Quad (Bottom), 4

gl.glVertex2fv(cuber[5]); // Top Left Of The Quad (Bottom), 5

gl.glVertex2fv(cuber[5]); // Top Left Of The Quad (Bottom), 5

gl.glVertex2fv(cuber[6]); // Bottom Left Of The Quad (Bottom), 6

gl.glVertex2fv(cuber[6]); // Bottom Left Of The Quad (Bottom), 6

gl.glVertex2fv(cuber[7]); // Bottom Right Of The Quad (Bottom), 7

gl.glVertex2fv(cuber[7]); // Bottom Right Of The Quad (Bottom), 7

gl.glVertex2fv(cuber[4]); // Top Right Of The Quad (Bottom), 4

gl.glColor3f(0.0f,0.0f,1.0f); // Set The Color To Blue

gl.glVertex2fv(cuber[0]); // Top Right Of The Quad (Top), 0

gl.glVertex2fv(cuber[7]); // Bottom Right Of The Quad (Bottom), 7

gl.glVertex2fv(cuber[6]); // Bottom Left Of The Quad (Bottom), 6

gl.glVertex2fv(cuber[1]); // Top Left Of The Quad (Top), 1

gl.glVertex2fv(cuber[5]); // Top Left Of The Quad (Bottom), 5

gl.glVertex2fv(cuber[2]); // TBottom Left Of The Quad (Top), 2

 

gl.glVertex2fv(cuber[4]); // Top Right Of The Quad (Bottom), 4

gl.glVertex2fv(cuber[3]); // Bottom Right Of The Quad (Top), 3

gl.glEnd();

gl.glFlush();

}

public void displayChanged(GLDrawable gLDrawable, boolean modeChanged, boolean deviceChanged)

{

}

public void init(GLDrawable gLDrawable)

{

final GL gl = gLDrawable.getGL();

final GLU glu = gLDrawable.getGLU();

gl.glClearColor(0.0f, 0.0f, 0.0f,0.0f); // Black Background

gl.glMatrixMode(GL.GL_PROJECTION);

gl.glLoadIdentity();

glu.gluOrtho2D (-1.5f, 1.5f, -1.5f, 1.5f); // define drawing area

gLDrawable.addKeyListener(this);

}

public void reshape(GLDrawable gLDrawable, int x, int y, int width, int height)

{

}

 

public void keyPressed(KeyEvent e)

{

if (e.getKeyCode() == KeyEvent.VK_ESCAPE)

{

System.exit(0);

}

}

public void keyReleased(KeyEvent e) {}

public void keyTyped(KeyEvent e) {}

}

 

public static void main(String[] args)

{

Frame frame = new Frame("Lesson 5: 3D Shapes");

GLCanvas canvas = GLDrawableFactory.getFactory().createGLCanvas(new GLCapabilities());

canvas.addGLEventListener(new Renderer());

frame.add(canvas);

frame.setSize(500, 500);

frame.addWindowListener(new WindowAdapter()

{

public void windowClosing(WindowEvent e)

{

System.exit(0);

}

});

frame.show();

canvas.requestFocus();

}

}

 

 

OpenGL Perspective

 

glu.gluPerspective(angle_of_view, aspect ratio, front clipping plane, rear clipping plane);

 

glu.gluLookAt(x0,y0,z0,xref,yref,zref,Vx,Vy,Vz);

 

default:

P0 = P(x0,y0,z0) = (0,0,0)

Pref = (0,0,-1)

Vup_Vector = (Vx,Vy,Vz) = (0,1,0)

 

 

 

import java.awt.*;

import java.awt.event.*;

 

import net.java.games.jogl.*;

 

 

public class Cube2

{

static Animator animator = null;

 

static class Renderer

implements GLEventListener,

KeyListener

{

private float rquad = 0.0f;

public void display(GLDrawable gLDrawable)

{

final GL gl = gLDrawable.getGL();

gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);

float [][] cube = { {1.0f, 1.0f,-1.0f},{-1.0f, 1.0f, -1.0f},

{-1.0f, 1.0f, 1.0f},{1.0f, 1.0f, 1.0f},

{1.0f,-1.0f, 1.0f},{-1.0f,-1.0f, 1.0f},

{-1.0f,-1.0f,-1.0f},{1.0f,-1.0f,-1.0f}};

gl.glMatrixMode(GL.GL_MODELVIEW);

gl.glLoadIdentity();

gl.glTranslatef(0.0f, 0.0f, -4.0f);

gl.glRotatef(rquad, 1.0f, 1.0f, 1.0f);

gl.glLineWidth (2.0f);

gl.glBegin(GL.GL_LINES);

gl.glColor3f(0.0f,1.0f,0.0f); // Set The Color To Green

gl.glVertex3fv(cube[0]); // Top Right Of The Quad (Top), 0

gl.glVertex3fv(cube[1]); // Top Left Of The Quad (Top), 1

gl.glVertex3fv(cube[1]); // Top Left Of The Quad (Top), 1

gl.glVertex3fv(cube[2]); // Bottom Left Of The Quad (Top), 2

gl.glVertex3fv(cube[2]); // Bottom Left Of The Quad (Top), 2

gl.glVertex3fv( cube[3]); // Bottom Right Of The Quad (Top), 3

gl.glVertex3fv( cube[3]); // Bottom Right Of The Quad (Top), 3

gl.glVertex3fv(cube[0]); // Top Right Of The Quad (Top), 0

gl.glColor3f(1.0f,0.5f,0.0f); // Set The Color To Orange

gl.glVertex3fv( cube[4]); // Top Right Of The Quad (Bottom), 4

gl.glVertex3fv(cube[5]); // Top Left Of The Quad (Bottom), 5

gl.glVertex3fv(cube[5]); // Top Left Of The Quad (Bottom), 5

gl.glVertex3fv(cube[6]); // Bottom Left Of The Quad (Bottom), 6

gl.glVertex3fv(cube[6]); // Bottom Left Of The Quad (Bottom), 6

gl.glVertex3fv(cube[7]); // Bottom Right Of The Quad (Bottom), 7

gl.glVertex3fv(cube[7]); // Bottom Right Of The Quad (Bottom), 7

gl.glVertex3fv( cube[4]); // Top Right Of The Quad (Bottom), 4

gl.glColor3f(0.0f,0.0f,1.0f); // Set The Color To Blue

gl.glVertex3fv(cube[0]); // Top Right Of The Quad (Top), 0

gl.glVertex3fv( cube[7]); // Bottom Right Of The Quad (Bottom), 7

gl.glVertex3fv(cube[6]); // Bottom Left Of The Quad (Bottom), 6

gl.glVertex3fv(cube[1]); // Top Left Of The Quad (Top), 1

gl.glVertex3fv(cube[5]); // Top Left Of The Quad (Bottom), 5

gl.glVertex3fv(cube[2]); // Top Right Of The Quad (Top), 0

 

gl.glVertex3fv( cube[4]); // Top Right Of The Quad (Bottom), 4

gl.glVertex3fv( cube[3]); // Bottom Right Of The Quad (Top), 3

gl.glEnd();

gl.glFlush();

rquad += 0.05f;

}

public void displayChanged(GLDrawable gLDrawable, boolean modeChanged, boolean deviceChanged)

{

}

public void init(GLDrawable gLDrawable)

{

final GL gl = gLDrawable.getGL();

final GLU glu = gLDrawable.getGLU();

// gl.glShadeModel(GL.GL_SMOOTH); // Enable Smooth Shading

gl.glClearColor(0.0f, 0.0f, 0.0f, 0.5f); // Black Background

gl.glClearDepth(1.0f); // Depth Buffer Setup

gl.glEnable(GL.GL_DEPTH_TEST); // Enables Depth Testing

gl.glDepthFunc(GL.GL_LEQUAL); // The Type Of Depth Testing To Do

gl.glMatrixMode(GL.GL_PROJECTION);

gl.glLoadIdentity();

glu.gluLookAt(0.0,0.0,0.0,0.0,0.0,-1.0,0.0,1.0,0.0);

 

glu.gluPerspective(70.0f, 1.0, 0.0, 20.0);

gLDrawable.addKeyListener(this);

}

public void reshape(GLDrawable gLDrawable, int x, int y, int width, int height)

{

}

 

public void keyPressed(KeyEvent e)

{

if (e.getKeyCode() == KeyEvent.VK_ESCAPE)

{

animator.stop();

System.exit(0);

}

}

public void keyReleased(KeyEvent e) {}

public void keyTyped(KeyEvent e) {}

}

 

public static void main(String[] args)

{

Frame frame = new Frame("Lesson 5: 3D Shapes");

GLCanvas canvas = GLDrawableFactory.getFactory().createGLCanvas(new GLCapabilities());

canvas.addGLEventListener(new Renderer());

frame.add(canvas);

frame.setSize(300, 300);

animator = new Animator(canvas);

frame.addWindowListener(new WindowAdapter()

{

public void windowClosing(WindowEvent e)

{

animator.stop();

System.exit(0);

}

});

frame.show();

animator.start();

canvas.requestFocus();

}

}