# Java Sonnensystem Applet



## XellosFX (14. Mrz 2005)

Hallo,

ich muss für die Schule ein Java-Applet als Projekt-arbeit erstellen, dies entscheidet über meine Vornote für die Abschlussprüfung. Als Projekt wollte ich ein Sonnensystem mit Java erstellen mit Planeten die sich um die Sonne drehen und evtl. auch noch die zu den Planeten dazugehörigen Monde. Dies soll wenn es geht in 3D sein.
Von euch wollte ich wissen wie ich dies am besten realisieren kann.
Habe ca. 5 Wochen zeit dafür.

XellosFX


----------



## Sky (14. Mrz 2005)

Wie sieht denn dein Ansatz aus?

Oder gibt es ein konkretes Problem zur Aufgabenstellung?


----------



## XellosFX (14. Mrz 2005)

Nen ansatz hab ich noch nicht, hab mich erst heute für mein Projekt entschieden.
Ein Problem kenn ich jedenfalls schon und das ist Umlaufban der Planeten ich weiß nicht wie ich die berechnen soll!


----------



## DP (14. Mrz 2005)

na das ist doch mal ein nettes projekt 

wieso umlaufbahn berechnen? die umlaufbahnen findest du sicherlich im netz. 

das einzige was du brauchst ist ein zentrum (sonne) und ein paar lausige elypsen, fertig


----------



## XellosFX (14. Mrz 2005)

Hab hier ein Sonnensystem Applet, nur leider hat es 100 fehler.
Vieleicht liegt es an nem fehler von meinem compiler oder so, wäre super wenn sich das mal jemand angucken könnte.


```
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) {}  
	
	
	}
}
```

XellosFX


----------



## Sky (14. Mrz 2005)

Ich hab's mal drüber geschaut (ohne jeden einzelnen Fehler zu analysieren) und ich glaube eher an Quellcode-Fehler als an einen Compiler-Fehler. 
Geh deine Compiler-Meldungen doch mal durch: Eigentlich wird Dir direkt gesagt, was nicht stimmt...


----------



## XellosFX (14. Mrz 2005)

Da liegt der Fehler --> import gl4java.GLContext;

ich brauch GL4java, woher kriege ich das??? 
hab schon bei google gesucht aber irgendwie nix gefunden!!!

XellosFX


----------



## Roar (14. Mrz 2005)

lol xellos, du solltest dein applet schon selbst schreiben oder meinst du dein lehrer mekrt nicht dass du den code irgendwo im netz geklaut hast und du nichmal weißt welche technologieen du dadrin verwendest :?


----------



## Roar (14. Mrz 2005)

XellosFX hat gesagt.:
			
		

> hab schon bei google gesucht aber irgendwie nix gefunden!!!



jane, is klar: http://www.google.de/search?hl=de&q=gl4java&btnG=Google-Suche&meta=


----------



## Bleiglanz (15. Mrz 2005)

ist schon recht anspruchsvoll

=> bedenke dass du eine zoom funktion brauchst, denn die umlaufbahnen in unserem sonnensystem passen nicht auf einen bildschirm

wenn du die umlaufbahn von pluto darstellst, dann sind alle anderen WINZIG


----------



## XellosFX (15. Mrz 2005)

Läuft das Programm bei euch???


----------

