# Probleme mit dem Licht und dem KeyListener



## Sonic (11. Apr 2008)

Guten Abend Javagemeinde.

Ich habe ein Problem mit dem Licht. Es funktioniert soweit, doch sobald ich das Objekt bewege, passieren seltsame Dinge mit dem Objekt. Ich habe keinen Plan. ???:L

PS:
Die Tasten 8,2 & 4,6 bewegen das Objekt!

Link (JAR-Datei):
http://rapidshare.com/files/106702925/Pool_fat.jar


----------



## pyr0t0n (11. Apr 2008)

could not find main class


----------



## Sonic (11. Apr 2008)

> could not find main class


Also bei mir funktionier es! 

Das ist der Code, ist aber noch in Arbeit. :### 

```
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.media.opengl.GL;
import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLCanvas;
import javax.media.opengl.GLCapabilities;
import javax.media.opengl.GLEventListener;
import javax.media.opengl.glu.GLU;
import javax.media.opengl.glu.GLUquadric;
import javax.swing.JFrame;

import com.sun.opengl.util.Animator;

public class Start{

	static Animator animator = null;
	
	static class Zeichenfläche extends GLCanvas implements GLEventListener, KeyListener {		
		private GL  gl;
		private GLU glu;
		
		float X = 0.0f;
		float Y = 0.0f;
		
		
		public Zeichenfläche() {
			super();
		}
		
		public Zeichenfläche(GLCapabilities cap) {
			super(cap);
		}

		void spin() {
			X += 0.01f;
		}
		
		@Override 
		public void display(GLAutoDrawable arg0) {	
			 gl = arg0.getGL();
			 gl.glClear(GL.GL_COLOR_BUFFER_BIT);
			 gl.glLoadIdentity();

			 glu = new GLU();
		
			 glu.gluLookAt(0, 0, 5, 0, 0, 0, 0, 1, 0);
			 gl.glRotatef(Y, X, 0, 0);												
			 gl.glFlush();

			 setLight(gl);
			 
			 gl.glColor3f(1, 1, 1);
			 drawFigure(gl, glu, Y, X);
			 
			 
			 glu.gluLookAt(0, 0, 5, 0, 0, 0, 0, 1, 0);
			 gl.glRotatef(Y, X, 1, 1);		
			 gl.glFlush();
			 
			 spin();
		}	
		
		
		
		
		 public void drawFigure(GL gl, GLU glu, float x, float z) {
		     gl.glPushMatrix();

		     gl.glTranslated(x, 0.5, z);
		     GLUquadric qobj = glu.gluNewQuadric();

		     // mitte
		     glu.gluQuadricDrawStyle(qobj, GLU.GLU_FILL);
		     glu.gluQuadricNormals(qobj, GLU.GLU_SMOOTH);
		     glu.gluSphere(qobj, 0.35f, 30, 30);

		     // unten
		     gl.glRotated(100, 1, 0, 0);
		     glu.gluQuadricDrawStyle(qobj, GLU.GLU_FILL);
		     glu.gluQuadricNormals(qobj, GLU.GLU_SMOOTH);
		     glu.gluCylinder(qobj, 0.2, 0.1, 1.5, 30, 30);

//		     // vorne
//		     gl.glRotated(100, 1, 0, 0);
//		     glu.gluQuadricDrawStyle(qobj, GLU.GLU_FILL);
//		     glu.gluQuadricNormals(qobj, GLU.GLU_SMOOTH);
//		     glu.gluCylinder(qobj, 0.1, 0.4, 1.2, 30, 30);
//		     
//		     // oben
//		     gl.glRotated(100, 1, 0, 0);
//		     glu.gluQuadricDrawStyle(qobj, GLU.GLU_FILL);
//		     glu.gluQuadricNormals(qobj, GLU.GLU_SMOOTH);
//		     glu.gluCylinder(qobj, 0.1, 0.4, 1.2, 30, 30);
//		     
//		     // hinten
//		     gl.glRotated(100, 1, 0, 0);
//		     glu.gluQuadricDrawStyle(qobj, GLU.GLU_FILL);
//		     glu.gluQuadricNormals(qobj, GLU.GLU_SMOOTH);
//		     glu.gluCylinder(qobj, 0.1, 0.4, 1.2, 30, 30);


		     gl.glPopMatrix();
		 }

		 private void setLight(GL gl) {
			gl.glLightf(GL.GL_LIGHT1, GL.GL_CONSTANT_ATTENUATION,  1.0f);
			gl.glLightf(GL.GL_LIGHT1, GL.GL_LINEAR_ATTENUATION,    1.0f);
			gl.glLightf(GL.GL_LIGHT1, GL.GL_QUADRATIC_ATTENUATION, 1.0f);
			gl.glEnable(GL.GL_LIGHTING);
			gl.glEnable(GL.GL_LIGHT0);
			gl.glEnable(GL.GL_DEPTH_TEST);
			gl.glEnable(GL.GL_SMOOTH);
		}
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		@Override		// nicht implementiert
		public void displayChanged(GLAutoDrawable arg0, boolean arg1, boolean arg2) {
		}

		@Override		// nicht initialisieren
		public void init(GLAutoDrawable arg0) {
			arg0.addKeyListener(this);
		}
		
		@Override 		// keine Fenstereigenschaften
		public void reshape(GLAutoDrawable arg0, int arg1, int arg2, int arg3, int arg4) {
			gl = arg0.getGL();
			glu = new GLU();
			gl.glViewport(0, 0, arg3, arg4);
			gl.glMatrixMode(GL.GL_PROJECTION);
			gl.glLoadIdentity();

			glu.gluPerspective(100, 1, 1, 100);
			gl.glMatrixMode(GL.GL_MODELVIEW);
		}

		@Override
		public void keyPressed(KeyEvent e) {
			switch (e.getKeyChar()) {

			case '8':
				X -= 0.1f;
				this.repaint();
				break;

			case '2':
				X += 0.1f;
				this.repaint();
				break;

			case '4':
				Y -= 0.1f;
				this.repaint();
				break;
				
			case '6':
				Y += 0.1f;
				this.repaint();
				break;
				
			case '5':
				animator.start();
				this.repaint();
				break;	
			}
		}

		@Override
		public void keyReleased(KeyEvent e) {			
		}

		@Override
		public void keyTyped(KeyEvent e) {			
		}
	}

	public static void main(String[] args) {
		GLCapabilities cap = new GLCapabilities();
		   			   cap.setDoubleBuffered(true);
		   			   cap.setSampleBuffers(true);
		
		Zeichenfläche  canva = new Zeichenfläche(cap);
					   canva.addGLEventListener(canva);
					   animator = new Animator(canva);
					  
		JFrame 		   fenster = new JFrame("Ein leeres Fenster");
					   fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
			   		   fenster.add(canva);
			   		   fenster.setSize(640, 480);
			   		   fenster.setVisible(true);
			   		   canva.requestFocus();
	}
}
```


----------

