import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import gl4java.GLContext;
import gl4java.awt.*;
import gl4java.utils.textures.*;
import gl4java.awt.GLAnimCanvas;
public class SunSystem extends Applet
{
//Our rendering canvas
//We are using GLAnimCanvas because we want the canvas
//to be constantly redrawn
AnimCanvasTemplate canvas = null;
/**
* void init()
*
* Initialise the applet.
*/
public void init()
{
//We will use BorderLayout to layout the applet components
setLayout(new BorderLayout());
//Create our canvas and add it to the center of the applet
canvas = new AnimCanvasTemplate(getSize().width, getSize().height);
add("Center", canvas);
}
/**
* void start()
*
* Start the applet.
*/
public void start()
{
//Start animating the canvas
canvas.start();
}
/**
* void stop()
*
* Stop the applet.
*/
public void stop()
{
//Stop animating the canvas
canvas.stop();
}
/**
* void destroy()
*
* Destroy the applet.
*/
public void destroy()
{
//Stop animating the canvas
canvas.stop();
//Destroy the canvas
canvas.destroy();
}
private class AnimCanvasTemplate extends GLAnimCanvas implements KeyListener{
public AnimCanvasTemplate(int width, int height) {
super(width,height);
addKeyListener(this);
}
public void preInit() {
String gljLib=null;
String glLib=null;
String gluLib=null;
if(GLContext.loadNativeLibraries(gljLib, glLib, gluLib)==false)
System.out.println("could not load native libs:"+
gljLib + ", " + glLib + ", " + gluLib);
else
System.out.println("load native libs:"+
gljLib + ", " + glLib + ", " + gluLib);
}
/**
* void destroy()
*
* Destroy the canvas.
*/
public void destroy()
{
//Destroy the GLContext
cvsDispose();
}
int[] texture = new int[5]; //Storage for one texture
long quadric1 = glu.gluNewQuadric();
long quadric2 = glu.gluNewQuadric();
long quadric = glu.gluNewQuadric();
public void init() {
/*
* Hier koennen OpenGL-Kommandos eingetragen werden,
* die nur einmal aufgerufen werden.
*/
PngTextureLoader texLoader = new PngTextureLoader(gl, glu);
PngTextureLoader texLoader2 = new PngTextureLoader(gl, glu);
PngTextureLoader texLoader3 = new PngTextureLoader(gl, glu);
PngTextureLoader texLoader4 = new PngTextureLoader(gl, glu);
PngTextureLoader texLoader5 = new PngTextureLoader(gl, glu);
texLoader.readTexture(getCodeBase(),"sun.png");
texLoader2.readTexture(getCodeBase(),"mercury.png");
texLoader3.readTexture(getCodeBase(),"venus.png");
texLoader4.readTexture(getCodeBase(),"earth.png");
texLoader5.readTexture(getCodeBase(),"mars.png");
if(texLoader.isOk() && texLoader2.isOk() && texLoader3.isOk() && texLoader4.isOk() && texLoader5.isOk())
{
//Create Texture
gl.glGenTextures(5, texture);
gl.glBindTexture(GL_TEXTURE_2D, texture[0]);
gl.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
gl.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
gl.glTexImage2D(GL_TEXTURE_2D,
0,
3,
texLoader.getImageWidth(),
texLoader.getImageHeight(),
0,
GL_RGB,
GL_UNSIGNED_BYTE,
texLoader.getTexture());
gl.glBindTexture(GL_TEXTURE_2D, texture[1]);
gl.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
gl.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
gl.glTexImage2D(GL_TEXTURE_2D,
0,
3,
texLoader2.getImageWidth(),
texLoader2.getImageHeight(),
0,
GL_RGB,
GL_UNSIGNED_BYTE,
texLoader2.getTexture());
gl.glBindTexture(GL_TEXTURE_2D, texture[2]);
gl.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
gl.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
gl.glTexImage2D(GL_TEXTURE_2D,
0,
3,
texLoader3.getImageWidth(),
texLoader3.getImageHeight(),
0,
GL_RGB,
GL_UNSIGNED_BYTE,
texLoader3.getTexture());
gl.glBindTexture(GL_TEXTURE_2D, texture[3]);
gl.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
gl.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
gl.glTexImage2D(GL_TEXTURE_2D,
0,
3,
texLoader4.getImageWidth(),
texLoader4.getImageHeight(),
0,
GL_RGB,
GL_UNSIGNED_BYTE,
texLoader4.getTexture());
gl.glBindTexture(GL_TEXTURE_2D, texture[4]);
gl.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
gl.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
gl.glTexImage2D(GL_TEXTURE_2D,
0,
3,
texLoader5.getImageWidth(),
texLoader5.getImageHeight(),
0,
GL_RGB,
GL_UNSIGNED_BYTE,
texLoader5.getTexture());
}
}
float alpha1 = 0;
float alpha2 = 0;
float alpha3 = 0;
float alpha4 = 0;
float alpha5 = 0;
float alpha6 = 0;
float alpha7 = 0;
float alpha8 = 0;
float alpha9 = 0;
float alpha10 = 0;
float alpha11 = 0;
float alpha12 = 0;
float angle = 0;
float zoom = 0;
public void display() {
if( glj.gljMakeCurrent() == false ) {
return;
}
// Hintergrundfarbe setzen
gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
// Framebuffer mit Hintergrundfarbe fuellen
gl.glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
/*
* Hier bitte OpenGL-Kommandos einfuegen.
*/
//Enable Texture Mapping
gl.glEnable(GL_TEXTURE_2D);
gl.glMatrixMode(GL_PROJECTION);
gl.glLoadIdentity();
gl.glFrustum(-0.25,0.25,-0.25,0.25,1.0,60.0);
gl.glEnable(GL_DEPTH_TEST);
gl.glDepthRange(0.0,1.0);
gl.glMatrixMode(GL_MODELVIEW);
gl.glLoadIdentity();
gl.glEnable(GL_LIGHTING);
gl.glEnable(GL_LIGHT0);
gl.glShadeModel(GL_SMOOTH);
float light_position[] = { 0.0f, 0.0f, -20.0f+zoom, 1.0f };
gl.glLightfv(GL_LIGHT0,GL_POSITION, light_position);
gl.glTranslatef(0.0f,0.0f,zoom);
gl.glTranslatef(0.0f,0.0f,-22.0f);
gl.glRotatef(angle,1.0f,0.0f,0.0f);
gl.glPushMatrix();
gl.glPushMatrix();
gl.glPushMatrix();
//Sonne
long quadric = glu.gluNewQuadric();
glu.gluQuadricTexture(quadric, GL_TRUE);
glu.gluQuadricNormals(quadric, GLU_SMOOTH);
gl.glBindTexture(GL_TEXTURE_2D, texture[0]);
glu.gluSphere(quadric1,0.5f,25,25);
gl.glRotatef(20,1.0f,0.0f,0.0f);
gl.glRotatef(-alpha2,0.0f,1.0f,0.0f);
alpha2 = alpha2 + 5;
gl.glTranslatef(2.3f,0.0f,0.0f);
//gl.glRotatef(-90.0f,1.0f,0.0f,0.0f);
gl.glRotatef(alpha3,0.0f,1.0f,0.0f);
alpha3 = alpha3 + 1;
//Merkur
gl.glBindTexture(GL_TEXTURE_2D, texture[1]);
glu.gluSphere(quadric, 0.2f,25,25);
gl.glPopMatrix();
gl.glRotatef(10,1.0f,0.0f,0.0f);
gl.glRotatef(-alpha4,0.0f,1.0f,0.0f);
alpha4 = alpha4 + 4;
gl.glTranslatef(3.1f,0.0f,0.0f);
gl.glRotatef(alpha5,0.0f,1.0f,0.0f);
alpha5 = alpha5 + 1;
//gl.glRotatef(-25.0f,1.0f,0.0f,0.0f);
//Venus
gl.glBindTexture(GL_TEXTURE_2D, texture[2]);
glu.gluSphere(quadric,0.4f,25,25);
gl.glPopMatrix();
gl.glRotatef(-alpha6,0.0f,1.0f,0.0f);
alpha6 = alpha6 + 3;
gl.glTranslatef(4.3f,0.0f,0.0f);
gl.glRotatef(alpha7,0.0f,1.0f,0.0f);
alpha7 = alpha7 + 1;
//Erde
gl.glBindTexture(GL_TEXTURE_2D, texture[3]);
glu.gluSphere(quadric,0.2f,25,25);
//Mond der Erde
gl.glRotatef(20,1.0f,0.0f,0.0f);
gl.glRotatef(-alpha10,0.0f,1.0f,0.0f);
alpha10 = alpha10 + 6;
gl.glTranslatef(0.65f,0.0f,0.0f);
glu.gluSphere(glu.gluNewQuadric(),0.1f,25,25);
gl.glPopMatrix();
gl.glRotatef(5,1.0f,0.0f,0.0f);
gl.glRotatef(-alpha8,0.0f,1.0f,0.0f);
alpha8 = alpha8 + 2;
gl.glTranslatef(5.3f,0.0f,0.0f);
gl.glRotatef(alpha9,0.0f,1.0f,0.0f);
alpha9 = alpha9 + 1;
//Mars
gl.glBindTexture(GL_TEXTURE_2D, texture[4]);
glu.gluSphere(quadric,0.2f,25,25);
//Mond 1 des Mars
gl.glRotatef(10,1.0f,0.0f,0.0f);
gl.glRotatef(-alpha11,0.0f,1.0f,0.0f);
alpha11 = alpha11 + 8;
gl.glTranslatef(0.45f,0.0f,0.0f);
glu.gluSphere(glu.gluNewQuadric(),0.06f,25,25);
//Mond 2 des Mars
gl.glRotatef(5 ,1.0f,0.0f,0.0f);
gl.glRotatef(-alpha12,0.0f,1.0f,0.0f);
alpha12= alpha12 + 3;
gl.glTranslatef(0.45f,0.0f,0.0f);
glu.gluSphere(glu.gluNewQuadric(),0.05f,25,25);
gl.glFlush();
glj.gljSwap();
glj.gljFree();
}
/** Handle the key typed event from the text field. */
public void keyTyped(KeyEvent e) {}
/** Handle the key pressed event from the text field. */
public void keyPressed(KeyEvent e) {
if (e.getKeyChar() == 'u'){
angle = angle +15;
if (angle >90)
angle = 90;
repaint();
System.out.println(angle);
}
if (e.getKeyChar() == 'd'){
angle = angle -15;
if (angle < 0)
angle = 0;
repaint();
System.out.println(angle);
}
if (e.getKeyChar() == 'i'){
zoom = zoom + 1;
if (zoom > 40)
zoom = 40;
repaint();
System.out.println(zoom);
}
if (e.getKeyChar() == 'o'){
zoom = zoom - 1;
if (zoom < -40)
zoom = -40;
repaint();
System.out.println(zoom);
}
}
/** Handle the key released event from the text field. */
public void keyReleased(KeyEvent e) {}
}
}