Bewegungen mit JOGL

Aldimann

Bekanntes Mitglied
Hi zusammen

bin grad irgendwie auf nen paar alte JOGL Sachen gestoßen und wollte mal wieder bissl was damit machen.

Momentan hab ich sowas wie nen Spielfeld mit ein paar Figuren, aber leider nicht mehr.

Kann mir jetzt jemand sagen, wie ich Bilder während der Laufzeit verändern kann? Also figuren umsetzen etc.

Oder halt nen Tutorial...

Vielen dank schonmal!
 

Evil-Devil

Top Contributor
Genauso wie du ihre Position setzt. via glTranslate und den passenden neuen Positionsangaben. Oder direkt die passende Matrix manipulieren. Ich würde aber ersteres bevorzugen, dazu hat man schließlich die Funktion.
 

Aldimann

Bekanntes Mitglied
Muss ich dazu nicht die alte Position des Objektes löschen?

Hast du zufällig mal ein Codebeispiel, indem eine Figur oder so auf einen klick oder Tastendruck reagiert?
 

Aldimann

Bekanntes Mitglied
Hätte evtl. auch im ersten Post erwähnen sollen:

Der Kenntnisstand auf dem kompletten Gebiet ist auf gut deutsch gleich null.

Java ist kein Thema, JOGL fällt mir ein wenig schwer aber mit ner menge Codebeispiele fusel ich mich schon zurrecht.

Und 3D Sachen noch nie was gemacht außer mal ein paar Maps mitm Editor gemodelt ;).

Also wo lese ich mich da am besten ein bzgl. 3D Transformationen?
Bevor ich jetzt das google anfange kann mir ja hier sicher einer einen Artikel empfehlen oder?
 
G

Guest2

Gast
Moin,

wie EgonOlsen schon schrieb, streng genommen hat "Bewegung" erstmal gar nichts mit JoGL zu tun. Soll heißen, JoGL bietet Dir auch keinerlei Hilfe bei der Erstellung einer "Bewegung".

Sprich, Du zeichnest mit JoGL eine Folge von voneinander unabhängigen Einzelbildern, wobei es an Dir liegt, die Veränderungen der Einzelbilder so vorzunehmen, das diese als Bewegung wahrgenommen werden.

Als quick and dirty (in JoGL1, da Du von "paar alte JOGL Sachen" schriebst):

Java:
package late.blub;

import java.awt.Frame;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.geom.Point2D;

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

import com.sun.opengl.util.Animator;


public class Move implements GLEventListener, KeyListener {

    private static final double  moveSpeed  = 0.1f;

    private final Point2D.Double position   = new Point2D.Double();
    private long                 lastUpdate = System.nanoTime();

    private GL                   gl;
    private GLU                  glu;


    @Override
    public void init(final GLAutoDrawable drawable) {

        gl = drawable.getGL();
        glu = new GLU();

    }


    private void updateWorld() {

        final double step = moveSpeed * -((lastUpdate - (lastUpdate = System.nanoTime())) / 10E7);

        synchronized (position) {

            if ((position.getX() - step) > -1)
                position.setLocation(position.getX() - step, position.getY());

        }

    }


    @Override
    public void display(final GLAutoDrawable drawable) {

        updateWorld();

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

        synchronized (position) {

            gl.glTranslated(position.getX(), position.getY(), -3.0f);

        }

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

    }


    @Override
    public void reshape(final GLAutoDrawable drawable, final int x, final int y, final int width, int height) {

        if (height <= 0)
            height = 1;

        gl.glMatrixMode(GL.GL_PROJECTION);
        gl.glLoadIdentity();
        glu.gluPerspective(45.0f, (float) width / (float) height, 1.0, 1000.0);
        gl.glMatrixMode(GL.GL_MODELVIEW);
        gl.glLoadIdentity();

    }


    @Override
    public void keyPressed(final KeyEvent e) {

        if (e.getKeyCode() == KeyEvent.VK_P) {

            synchronized (position) {

                position.setLocation(1.0, 0.0);

            }

        }

    }


    public static void main(final String[] args) {

        final Frame frame = new Frame();
        final GLCanvas canvas = new GLCanvas();
        final Animator animator = new Animator(canvas);
        final Move main = new Move();

        canvas.addGLEventListener(main);
        canvas.addKeyListener(main);

        frame.add(canvas);
        frame.setSize(900, 500);
        frame.addWindowListener(new WindowAdapter() {

            @Override
            public void windowClosing(final WindowEvent e) {

                new Thread(new Runnable() {
                    public void run() {

                        animator.stop();
                        System.exit(0);

                    }
                }).start();
            }
        });

        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
        animator.start();

        canvas.requestFocusInWindow();
        
    }


    @Override public void displayChanged(final GLAutoDrawable drawable, final boolean modeChanged, final boolean deviceChanged) { }
    @Override public void keyReleased(final KeyEvent e) { }
    @Override public void keyTyped(final KeyEvent e) { }

}

Gruß,
Fancy
 

EgonOlsen

Bekanntes Mitglied
Ich hatte zu hause ein PDF, dass als Einsteig ganz nett ist. Ich gucke nachher mal, ob ich das noch finde...
Hab's gefunden. Das ist relativ einfach gehalten und auf Schulniveau, aber ich finde, es fasst die wesentlichen Dinge für den Einstieg gut zusammen, ohne mit zu vielen Details zu verwirren.
Zu beachten bei all diesen Dingen ist, dass an den Schulen und Unis (zumindest im deutschsprachigen Raum) meist mit Zeilenmatrizen gearbeitet wird (wie z.B. Direct3D es auch macht), aber OpenGL mit Spaltenmatrizen arbeitet. Das kann zur Verwirrung führen, wenn man die Reihenfolge von Matrixmultiplikationen betrachtet. Die ändert sich nämlich dabei.

Download: http://www.jpct.net/download/misc/FBA.PDF
 
Zuletzt bearbeitet:

Aldimann

Bekanntes Mitglied
So habe mir jetzt das PDF mit einigen Hilfestellungen etc. zu Teilen durchgearbeitet.

Zu Teilen bis jetzt deshalb nur weil Theorie ist zwar gut aber ohne Praxis leider nicht so hängen bleibt.

Deshalb jetzt die Frage wie bekomme ich es hin, dass ich Bilder an einander hänge etc.

In dem Quelltext von Guest2 sollte da ja schon einiges von drin stehen aber kann vielleich nochmal jemand die entscheidenden Code stellen aufzeigen oder nen Code mit Kommentaren?

Wäre sehr nett!
 
G

Guest2

Gast
Moin,

Momentan hab ich sowas wie nen Spielfeld mit ein paar Figuren, aber leider nicht mehr.

Wie hast Du den Deine Figuren auf dem Spielfeld positioniert?

In meinem Beispiel oben ist der entsprechende Abschnitt einfach:

Java:
synchronized (position) { 

            gl.glTranslated(position.getX(), position.getY(), -3.0f);

}

Du musst lediglich die Position deiner Figuren für jedes Frame neu berechnen. Da steckt nix großes hinter. Im Beispiel oben wird einfach für jedes Frame das Dreieck um einen Zeitabhängigen Wert nach links verschoben.

Die Berechnung der neuen Position für das aktuelle Frame erfolgt hiermit:

Java:
final double step = moveSpeed * -((lastUpdate - (lastUpdate = System.nanoTime())) / 10E7);

synchronized (position) {

    if ((position.getX() - step) > -1)
        position.setLocation(position.getX() - step, position.getY());

}

Der Rest ist normaler JoGL Code.

Zeig doch mal den Code für dein Spielbrett mit Figuren als KSKB, dann kann man das ggf. einfacher zeigen.

Gruß,
Fancy
 

Aldimann

Bekanntes Mitglied
Danke!

Ich hab den Code ausm Tutorial hab damit bissl rumgespielt gehabt aber das hier bietet schon einen guten Ausgangspunkt find ich.

Btw. ist net.java.games.jogl nicht noch ne alte Version? Hatte ich mal irgendwo gelesen.

Sind zwei Klassen die erste halt um das Fenster zu erzeugen.

Java:
import java.awt.BorderLayout;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

import javax.swing.JFrame;
import javax.swing.SwingUtilities;

import net.java.games.jogl.GLCanvas;
import net.java.games.jogl.GLCapabilities;
import net.java.games.jogl.GLDrawableFactory;


public class Beispielszene extends JFrame
{
    
    public Beispielszene(){
    	
    	GLCapabilities glcaps = new GLCapabilities();
    	GLCanvas canvas = GLDrawableFactory.getFactory().createGLCanvas(glcaps);
    	BeispielszeneView view = new BeispielszeneView();
    	canvas.addGLEventListener(view);
    	
    	setSize(500, 500);
    	setTitle("CAV-Projekt: JOGL - Beispielszene");
    	setResizable(false);
    	
    	getContentPane().add(canvas, BorderLayout.CENTER);
    	
    	addWindowListener(new WindowAdapter(){
    	
    		@Override
    		public void windowClosing(WindowEvent e) {
    			System.exit(0);
    			}
    	});
    	
    }
    
    public static void main(String[] args){
    	final Beispielszene app = new Beispielszene();
    	SwingUtilities.invokeLater(new Runnable(){

			@Override
			public void run() {
			
				app.setVisible(true);
			}
    		
    	});
    }
 }

Java:
import net.java.games.jogl.*;


public class BeispielszeneView implements GLEventListener
{

	@Override
	public void display(GLDrawable arg0) {

		GL gl = arg0.getGL();
		GLU glu = arg0.getGLU();
		
		gl.glClear(GL.GL_COLOR_BUFFER_BIT);
		
		gl.glLoadIdentity();
		
		glu.gluLookAt(0, 12, 15, 0, 0, 0, 0, 1, 0);
		
		gl.glTranslated(0, 1, 0);
		
		drawField(gl, glu);
		
		
		gl.glColor3f(1f, 0f, 0f);
		drawFigure(gl, glu, 1, 3);
		
		gl.glColor3f(1f, 1f, 0f);
		drawFigure(gl, glu, 0, 3);
		
		gl.glColor3f(0f, 0f, 1f);
		drawFigure(gl, glu, 1, 2);
		
		gl.glColor3f(1f, 0f, 1f);
		drawFigure(gl, glu, 0, 2);
	}

	private void drawFigure(GL gl, GLU glu, float x, float z) {
		gl.glPushMatrix();
		
		gl.glTranslated(x, 0, z);
		GLUquadric qobjc = glu.gluNewQuadric();
		
		glu.gluQuadricDrawStyle(qobjc, GLU.GLU_FILL);
		glu.gluQuadricNormals(qobjc, GLU.GLU_SMOOTH);
		glu.gluSphere(qobjc, 0.36f, 30, 30);
		
		gl.glRotated(90, 1, 0, 0);
		glu.gluQuadricDrawStyle(qobjc, GLU.GLU_FILL);
		glu.gluQuadricNormals(qobjc, GLU.GLU_SMOOTH);
		glu.gluCylinder(qobjc, 0.1, 0.4, 1.2, 30, 30);
		
		gl.glTranslated(0, 0, 1.2f);
		glu.gluQuadricDrawStyle(qobjc, GLU.GLU_FILL);
		glu.gluQuadricNormals(qobjc, GLU.GLU_SMOOTH);
		glu.gluCylinder(qobjc, 0.4, 0.4, 0.2, 30, 30);
		
		gl.glPopMatrix();
		
		
	}

	private void drawField(GL gl, GLU glu) {
		gl.glBegin(GL.GL_QUADS);
			gl.glVertex3f(-6.5f, -1.5f, -6.5f);
			gl.glVertex3f(-6.5f, -1.5f, 6.5f);
			gl.glVertex3f(6.5f, -1.5f, 6.5f);
			gl.glVertex3f(6.5f, -1.5f, -6.5f);
			
			gl.glEnd();
		
	}

	@Override
	public void displayChanged(GLDrawable arg0, boolean arg1, boolean arg2) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void init(GLDrawable arg0) {

		GL gl = arg0.getGL();
		GLU glu = arg0.getGLU();
		
		gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
        setCamera(gl, glu);
        
        gl.glMatrixMode(GL.GL_MODELVIEW);
	}
	
	private void setCamera(GL gl, GLU glu){
		int w = 500, h = 500;
		
		gl.glViewport(0, 0, w, h);
		
		gl.glMatrixMode(GL.GL_PROJECTION);
		gl.glLoadIdentity();
		glu.gluPerspective(50.0, 1, 2.0, 40.0);
		
	}

	@Override
	public void reshape(GLDrawable arg0, int arg1, int arg2, int arg3, int arg4) {
		// TODO Auto-generated method stub
		
	}

}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Fehlerhafte Mob Bewegungen in Tower Defense Spiel Spiele- und Multimedia-Programmierung 2
Luk10 Langsame(re) Bewegungen / Animationen Spiele- und Multimedia-Programmierung 3
G Bewegungen von Spielfigur Spiele- und Multimedia-Programmierung 2
E Java - Schnellere bewegungen Spiele- und Multimedia-Programmierung 27
G Flüssige Bewegungen Spiele- und Multimedia-Programmierung 7
G Vordefinierte Bewegungen Spiele- und Multimedia-Programmierung 4
DEvent ein kleines Billiard Spiel und die bewegungen der Kugeln Spiele- und Multimedia-Programmierung 3
E JOGL kein zugriff auf manche methoden Spiele- und Multimedia-Programmierung 5
A Spielfelder erstellen mit Jogl Java durch ein Koordinaten Array Spiele- und Multimedia-Programmierung 1
M [JOGL] Maus über einem gezeichnetem Objekt abfragen? Spiele- und Multimedia-Programmierung 5
M [JOGL] eclipse export Runnable Jar - startet nicht Spiele- und Multimedia-Programmierung 3
D [JOGL] bibliothek aus jar laden Spiele- und Multimedia-Programmierung 3
A JOGL Shader Anfängerprobleme Spiele- und Multimedia-Programmierung 2
A JOGL FloatBuffer vs Buffers Spiele- und Multimedia-Programmierung 2
A JOGL glBindBuffer einmalig oder mehrmalig? Spiele- und Multimedia-Programmierung 3
A Aufbau einer JOGL Anwendung Spiele- und Multimedia-Programmierung 12
Z lwjgl oder jogl nutzen Spiele- und Multimedia-Programmierung 9
A Jogl-Projekt unter 32-Bit kompiliert und unter 64-Bit ausführen, geht das überhaubt ?? Spiele- und Multimedia-Programmierung 9
turing JOGL Cubes performant Spiele- und Multimedia-Programmierung 17
M JOGL Cubus mit Rand darstellen Spiele- und Multimedia-Programmierung 3
T JOGL 2D Objekte drehen rotate Spiele- und Multimedia-Programmierung 4
X JOGL - wie zum laufen bringen? Spiele- und Multimedia-Programmierung 2
M Schatten mit JOGL Spiele- und Multimedia-Programmierung 4
D [JOGL 2.0] Kleines Problem mit freier Flugsteuerung Spiele- und Multimedia-Programmierung 3
U [JOGL 1.1.1a]Kleines Problem mit Text Overlays: Spiele- und Multimedia-Programmierung 19
D [JOGL] Freibewegliche Lichtquelle im Raum Spiele- und Multimedia-Programmierung 4
H JOGL 2.0 jars fehlen Spiele- und Multimedia-Programmierung 8
R JOGL: glUniformLocation gibt immer -1 zurück Spiele- und Multimedia-Programmierung 4
BattleMaster246 Problem mit Jogl Spiele- und Multimedia-Programmierung 14
Mikescher [JOGL] Access restriction Spiele- und Multimedia-Programmierung 6
K jogl einbinden Spiele- und Multimedia-Programmierung 6
X JOGL - Textur auf Quad verzerrt Spiele- und Multimedia-Programmierung 2
X JOGL - 2D Sprite richtig platzieren Spiele- und Multimedia-Programmierung 4
T JOGL im OrthoMode und Texturen verfärben sich Spiele- und Multimedia-Programmierung 3
J JOGL konfigurieren / Windows 7 64-bit Spiele- und Multimedia-Programmierung 7
R JOGL polygon smooth Spiele- und Multimedia-Programmierung 20
J [JOGL] Kamera zentrieren über Achse Spiele- und Multimedia-Programmierung 4
BattleMaster246 Schussrichtung festlegen - JOGL Spiele- und Multimedia-Programmierung 8
BattleMaster246 Jogl Libs werden nicht geladen Spiele- und Multimedia-Programmierung 5
A [JOGL] TextRenderer malt Fläche hinter Buchstaben aus Spiele- und Multimedia-Programmierung 2
V Jogl: Objekt trotz Rotation immer in gleiche Richtung bewegen Spiele- und Multimedia-Programmierung 5
U [JOGL]Libs und Dlls mitliefern: Spiele- und Multimedia-Programmierung 9
S JOGL Perspektive Spiele- und Multimedia-Programmierung 2
R 2D Grafik JOGL Spiele- und Multimedia-Programmierung 18
D jogl downloaden ... wo? Spiele- und Multimedia-Programmierung 3
S JOGL 64 bit Spiele- und Multimedia-Programmierung 7
A jogl 2d performance Spiele- und Multimedia-Programmierung 20
J JOGL mit Netbeans Spiele- und Multimedia-Programmierung 3
S Jogl findet keine GLProfile ? Spiele- und Multimedia-Programmierung 6
C Frage zu Ray-Picking mit JOGL Spiele- und Multimedia-Programmierung 13
F Game mit LWJGL/JOGL in executable JAR packen, wie? Spiele- und Multimedia-Programmierung 6
D Jogl:Textur auf GLUquadric wird vertikal spiegelverkehrt dargestellt Spiele- und Multimedia-Programmierung 2
F LWJGL Smoother animieren lassen (wie bei JOGL = Animator) Spiele- und Multimedia-Programmierung 3
F JOGL 2.0 Bug? Spiele- und Multimedia-Programmierung 3
F Jogl oder Java3D ? Spiele- und Multimedia-Programmierung 20
N Ein paar fragen zu JOGL Spiele- und Multimedia-Programmierung 4
M JOGL - Mehr als nur ein Canvas - Texturpool Spiele- und Multimedia-Programmierung 7
S Jogl, no gluegen-rt :-( Spiele- und Multimedia-Programmierung 4
BattleMaster246 Pong - JOGL Spiele- und Multimedia-Programmierung 2
I JOGL: Problem mit Blending bei Billboards (Transparenz) Spiele- und Multimedia-Programmierung 2
1 JOGL: Fensterinhalt verschwindet sofort wieder Spiele- und Multimedia-Programmierung 3
jemandzehage JOGL 3D-Koordinaten des Klicks bestimmen Spiele- und Multimedia-Programmierung 2
P Erkennen auf welche Objekte gezeigt wird in JoGL Spiele- und Multimedia-Programmierung 6
E JOGL nur weißes Fenster Spiele- und Multimedia-Programmierung 2
Y 3D Koordinatensystem==> JOGL Spiele- und Multimedia-Programmierung 7
Y JOGL / OPENGL in Frame Spiele- und Multimedia-Programmierung 11
A JOGL Würfel hat durchsichtige Seiten? Spiele- und Multimedia-Programmierung 13
N Jogl Probleme mit dem Buffer beim laden einer Textur Spiele- und Multimedia-Programmierung 2
P JOGL Button-klick-Problem Spiele- und Multimedia-Programmierung 2
S Jogl Problem bei Darstellung Spiele- und Multimedia-Programmierung 9
G JOGL Color stimmt nicht Spiele- und Multimedia-Programmierung 3
S JOGL Maven Dependency Spiele- und Multimedia-Programmierung 7
Developer_X JOGL - Sichtweite Spiele- und Multimedia-Programmierung 3
Developer_X JOGL Texturing Spiele- und Multimedia-Programmierung 31
Developer_X JOGL- Ich möchte mitmachen! Spiele- und Multimedia-Programmierung 23
X JOGL GL Kontext Initialisierung Spiele- und Multimedia-Programmierung 3
X Vertex Buffer Objects mit JOGL Spiele- und Multimedia-Programmierung 7
A JOGL / OpenGL Spiele- und Multimedia-Programmierung 7
P JOGL Cubemap Spiele- und Multimedia-Programmierung 7
P JOGL Installation Spiele- und Multimedia-Programmierung 15
J JOGL - Bild wird immer wieder weiß Spiele- und Multimedia-Programmierung 2
Antoras J3D / JME oder JOGL Spiele- und Multimedia-Programmierung 2
P GLSL in JOGL Spiele- und Multimedia-Programmierung 15
S jogl ins system einbinden Spiele- und Multimedia-Programmierung 3
W JOGL bleibt nach display() in PaintArea.paintComponent hängen Spiele- und Multimedia-Programmierung 5
S java /jogl /Texturen mit j3d Spiele- und Multimedia-Programmierung 3
S JOGL Fonts Spiele- und Multimedia-Programmierung 4
S JOGL Selection By Color Spiele- und Multimedia-Programmierung 3
E JOGL und TextRenderer Spiele- und Multimedia-Programmierung 9
H JoGL mit Anwendung verteilen... Spiele- und Multimedia-Programmierung 9
0x7F800000 weiß einer wozu ANTLR beim build von JOGL verwendet wird? Spiele- und Multimedia-Programmierung 3
H Jogl-Animator - Inhalt ändert sich nicht Spiele- und Multimedia-Programmierung 4
S JOGL + Multithreading Spiele- und Multimedia-Programmierung 2
P Probleme mit Vista und JOGL Spiele- und Multimedia-Programmierung 2
J Alpha Blending (jogl) Spiele- und Multimedia-Programmierung 5
G JOGL - glTranslate - Unterschiede bei zweimal Ausführen Spiele- und Multimedia-Programmierung 9
Kr0e Schattenproblem, JOGL, gluPerspective. Spiele- und Multimedia-Programmierung 2
J OpenGL (JOGL) - Radial Blur Effekt (Glow) Spiele- und Multimedia-Programmierung 2
J jogl - verschiedene Versionen Spiele- und Multimedia-Programmierung 7
Kr0e "gluSphere" (JOGL) soll Schatten werfen können Spiele- und Multimedia-Programmierung 5

Ähnliche Java Themen

Neue Themen


Oben