Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Sa Jul 05, 2025 08:27

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
BeitragVerfasst: So Okt 16, 2011 16:18 
Offline
DGL Member

Registriert: So Okt 16, 2011 12:25
Beiträge: 4
Programmiersprache: Java, C
Hallo zusammen.

Ich habe einen Würfel, den ich mit Mausbewegungen rotieren lassen möchte. Bewegungen in x-Achse sollen eine Y-Rotation bewirken und vertikale Mausbewegungen eine Rotation in X-Richtung. Das klappt alles auch schon ganz annehmbar, hat aber ein kleines Problem. Wenn ich den Würfel erst ein Stück um die Y-Achse drehe, dreht sich logischerweise auch das Koordinatensystem mit. Anschließende X-Achsen Bewegungen laufen entsprechend der neuen Lage der Achse.
Ich möchte allerdings, dass die X-Achse immer in Richtung der Kamera zeigt. Ist das machbar? Wenn ja, wie?

Ich arbeite mit Java und jogl, hier der relevante Teil meiner Klasse:

Code:
  1.  
  2.  //globale Variablen
  3.     public double[] pos = { 8, 1, 0 };
  4.     public double[] cam = { 0, 0, 0 };
  5.    
  6.     static double oldx, oldy;
  7.  
  8. public void display (GLAutoDrawable drawable) {
  9. //.....
  10.         gl.glMatrixMode(GL2.GL_MODELVIEW);
  11.         gl.glLoadIdentity();
  12.         glu.gluLookAt(pos[0], pos[1], pos[2], cam[0], cam[1], cam[2], 0, 1, 0);
  13.  
  14.    
  15.         gl.glRotated(oldx, 0, 1, 0);
  16.         gl.glRotated(oldy, 1, 0, 0);
  17.            
  18.         drawModel((GL2) gl, null);
  19. }
  20.  
  21.     public void mouseDragged(MouseEvent e) { //Das Mausevent.
  22.                
  23.         oldx = oldx-e.getX();
  24.         oldy = oldy-e.getY();
  25.  
  26.         oldx = e.getX();
  27.         oldy = e.getY();
  28.  
  29.     }
  30.  


Ich hoffe ich habe nichts Wichtiges dazu vergessen.

Für Tipps wär ich dankbar.

Grüße,
Clemens


Zuletzt geändert von ka9de am Do Okt 20, 2011 12:06, insgesamt 2-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: So Okt 16, 2011 22:59 
Offline
DGL Member

Registriert: Mo Nov 09, 2009 12:01
Beiträge: 200
Dein Problem habe ich in diesem Projekt mal umgesetzt : http://www.delphigl.com/forum/viewtopic.php?f=13&t=9811
Ich hoffe Du kannst Delphi lesen.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Okt 17, 2011 13:31 
Offline
DGL Member

Registriert: Sa Okt 18, 2008 11:59
Beiträge: 180
Auf das Risiko hin das meine Antwort wieder als etwas "Anmaßendes und extrem unfreundliches Verhalten gegenüber anderen Personen" gewertet wird...


Du kannst die ModelView Matrix mittels
Code:
  1. glGetFloatv(GL_MODELVIEW_MATRIX, @MVMatrix);

auslesen. Der Vektor(MVMatrix[0],
MVMatrix[4],
MVMatrix[8]);
Stellt die lokale x-Achse dar, um die du rotieren willst.

Viel Spaß. Schreib bescheid wenn es (nicht) klappt.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Okt 17, 2011 14:34 
Offline
DGL Member

Registriert: So Okt 16, 2011 12:25
Beiträge: 4
Programmiersprache: Java, C
SDH.Prod hat geschrieben:
Du kannst die ModelView Matrix mittels
Code:
  1. glGetFloatv(GL_MODELVIEW_MATRIX, @MVMatrix);

auslesen.


Die Idee hatte ich auch mal, einfach um ein bisschen Orientierung zu bekommen.. blöderweise hab ich da so meine Probleme. Java sagt mir, ich brauche da (abgesehen von der Matrix) einen FloatBuffer als Argument, den ich auch erstellen kann und anschließend wohl die Matrix einlese. Aber wie ich weiter mit den Buffer umgeh kapier ich nicht, habe verschiedene Methoden getestet und auch casts in normale Arrays o.Ä., wenns mal keine Exception gab, war das Ergebnis nicht wirklich hilfreich:

Code:
  1.  
  2.         FloatBuffer mat = (FloatBuffer) GLBuffers.newDirectGLBuffer (GL2.GL_FLOAT, 24);
  3.        
  4.         gl.glGetFloatv(GL2.GL_PROJECTION_MATRIX, mat);
  5.  


Die Dokumentation zum FloatBuffer Objekt hat mir auch nicht wirklich weitergeholfen, zu finden unter http://download.oracle.com/javase/1.4.2 ... uffer.html


@Jens01, ich denke das mit Delphi bekomm ich hin, werds mir jetzt mal angucken, danke.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Okt 17, 2011 16:07 
Offline
DGL Member

Registriert: Sa Okt 18, 2008 11:59
Beiträge: 180
Versuch es mal mit allocate und dem Parameter capacity=16.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 14 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.007s | 14 Queries | GZIP : On ]