# Suche Tutorial zum Einstieg in OpenGl mit Java (JOGL)



## zeugwart (28. Okt 2007)

Hallo allerseits,

Vorweg, sorry wegen der Überschrift, aber jede sinnvolle Bezeichnung des Themas wurde mir aus Spamschutztechnischen gründen verboten...

Ich suche verzweifelt nach einem Tutorial zum einstieg in OpenGl mit Java (JOGL).
Habe hier im Forum auch schon recht nützliches gefunden, z.B. wie man das schön in Eclipse einrichtet usw.

Leider sind alle Turorials, welche ich bisher versucht habe abzuarbeiten irgendwo brüchig, soll heissen das geht heute so nicht mehr wie es damals vor X + 4 Jahren war... :x 

Z.B. will das Tut von http://www.jogl.info/ mal überhaupt nicht so wirklich man braucht sich ja nur "GLDrawable" anzuschaun...
Scheint wohl durch "GLAutoDrawable" ersetzt worden zu sein...

Leider geht das da auch nicht mehr... 
	
	
	
	





```
GLU glu = arg0.getGLU();
```
Eclipse sagt:  The method getGLU() is undefined for the type GLAutoDrawable

Obs dran liegt das
	
	
	
	





```
import net.java.games.jogl.*;
```
 nicht funktioniert weis ich nicht...

In nem anderen Tut sollte man ein Bildchen in nem byte[] ablegen, schade dass
	
	
	
	





```
glTexImage2D
```
 kein byte[]
mehr will sondern ein Buffer...

Ums kurz zu machen ich wäre über funktionsfähige Tuts (deutsch o. englisch) bzw. Lösungsvorschägen zu
den genannten Problemen sehr erfreu ;-)

Gruss,
zeugwart[/quote]



_L-ectron-X hat diesen Beitrag am 28.10.2007 um 23:19 editiert._
_Titel des Themas angepasst. Um den Spamschutz wird sich gekümmert, sorry für den Ärger._


----------



## Fancy (1. Nov 2007)

Moin,

ein aktuelles Tutorial hab ich zwar gerade auch noch nicht zur Hand, aber evtl. kann ich Dir bei deinen drei Problemen trotzdem helfen:

1.: GLU:
Da sollte folgendes schon reichen:


```
GLU glu = new GLU();
```

2: import net.java.games.jogl.*;:
Hab leider keine Ahnung was da früher drinstand, aber eigentlich sollte alles was Du suchst unter folgendem zu finden sein:


```
import javax.media.opengl.*;
import javax.media.opengl.glu.*;
```

3.: Das einfachste für Deine Textur wäre:

```
import com.sun.opengl.util.texture.Texture;
import com.sun.opengl.util.texture.TextureIO;

In Deiner init():

gl.glEnable(GL.GL_TEXTURE_2D);
gl.glGenTextures(1, textureId, 0);
gl.glBindTexture(GL.GL_TEXTURE_2D, textureId[0]);
	    
File file = new File("test.png");
try{
    regularTexture = TextureIO.newTexture(file, true);
    regularTexture.setTexParameteri(GL.GL_TEXTURE_MAG_FILTER, GL.GL_LINEAR);
    regularTexture.setTexParameteri(GL.GL_TEXTURE_MIN_FILTER, GL.GL_LINEAR);
}catch(IOException e){
    e.printStackTrace();
}

Und dann wie gewohnt in Deiner display() z.B.:

gl.glBegin(GL.GL_TRIANGLES);
gl.glTexCoord2f(0.0f, 0.0f); 
gl.glVertex3f(0.0f, 1.0f, 0.0f);
gl.glTexCoord2f(0.0f, 1.0f); 
gl.glVertex3f(-1.0f, -1.0f, 0.0f);
gl.glTexCoord2f(1.0f, 1.0f); 
gl.glVertex3f(1.0f, -1.0f, 0.0f);
gl.glEnd();
```

Als einfaches Komplettbeispiel sähe das dann z.B. so aus:


```
package jogl;

import java.awt.Frame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
import java.io.IOException;

import javax.media.opengl.GL;
import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLCanvas;
import javax.media.opengl.GLEventListener;

import com.sun.opengl.util.Animator;
import com.sun.opengl.util.texture.Texture;
import com.sun.opengl.util.texture.TextureIO;


public class Q002 implements GLEventListener{

    private final int[] textureId = new int[1];
    private Texture     regularTexture;


    public static void main(String[] args){

        final Frame frame = new Frame("Q002");
        final GLCanvas canvas = new GLCanvas();

        canvas.addGLEventListener(new Q002());
        frame.add(canvas);
        frame.setSize(300, 300);

        final Animator animator = new Animator(canvas);
        frame.addWindowListener(new WindowAdapter(){

            @Override
            public void windowClosing(WindowEvent e){

                new Thread(new Runnable(){

                    public void run(){
                        animator.stop();
                        System.exit(0);
                    }
                }).start();
            }
        });

        frame.setVisible(true);
        animator.start();
    }


    public void init(GLAutoDrawable drawable){
        final GL gl = drawable.getGL();
        gl.glEnable(GL.GL_TEXTURE_2D);

        gl.glGenTextures(1, this.textureId, 0);
        gl.glBindTexture(GL.GL_TEXTURE_2D, this.textureId[0]);

        final File file = new File("test.png");
        try{
            this.regularTexture = TextureIO.newTexture(file, true);
            this.regularTexture.setTexParameteri(GL.GL_TEXTURE_MAG_FILTER, GL.GL_LINEAR);
            this.regularTexture.setTexParameteri(GL.GL_TEXTURE_MIN_FILTER, GL.GL_LINEAR);
        } catch(final IOException e){
            e.printStackTrace();
        }


    }


    public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height){
        final GL gl = drawable.getGL();
        final float h = (float)height / (float)width;

        gl.glMatrixMode(GL.GL_PROJECTION);

        gl.glLoadIdentity();
        gl.glFrustum(-1.0f, 1.0f, -h, h, 5.0f, 60.0f);
        gl.glMatrixMode(GL.GL_MODELVIEW);
        gl.glLoadIdentity();
        gl.glTranslatef(0.0f, 0.0f, -40.0f);
    }


    public void display(GLAutoDrawable drawable){
        final GL gl = drawable.getGL();
        gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
        this.drawTriangel(gl);
    }


    public void displayChanged(GLAutoDrawable drawable, boolean modeChanged, boolean deviceChanged){}


    public void drawTriangel(GL gl){
        gl.glBegin(GL.GL_TRIANGLES);
        gl.glTexCoord2f(0.0f, 0.0f);
        gl.glVertex3f(0.0f, 1.0f, 0.0f);
        gl.glTexCoord2f(0.0f, 1.0f);
        gl.glVertex3f(-1.0f, -1.0f, 0.0f);
        gl.glTexCoord2f(1.0f, 1.0f);
        gl.glVertex3f(1.0f, -1.0f, 0.0f);
        gl.glEnd();
    }

}
```

Gruß,
Michael


----------



## VuuRWerK (1. Nov 2007)

Kennst Du die altbekannten und vorallem sehr guten NeHe-Tutorials über OpenGL? Da gibt es u.a. auch einen Java-Port: http://pepijn.fab4.be/?page_id=34

Wirklich sehr nett gemacht kann ich nur empfehlen!

Gut Schuß
VuuRWerK


----------

