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

Aktuelle Zeit: Fr Jul 18, 2025 23:14

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 10 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Mi Jan 10, 2007 17:27 
Offline
DGL Member

Registriert: Fr Dez 08, 2006 14:27
Beiträge: 12
servus,
ich bin noch rel. unerfahren in OpenGL, deshalb verzeiht die vielleicht etwas blöde Frage...

Ich habe eine Navigation geschrieben, mit der ich mich in der OpenGL-3D-Welt bewegen möchte. Und zwar soll die Steuerung wie in einem Ego-Shooter funktionieren (zumindest wahlweise).

Mit folgendem simplen Code kann ich meine Position verändern und das Objekt (mesh) mit der Maus rotieren lassen.

Code:
  1. glpushmatrix();
  2.   gltranslatef(positionX, positionY, positionZ);
  3.  
  4.   glrotatef(angleX, 1.0,0.0,0.0);
  5.   glrotatef(angleY, 0.0,1.0,0.0);
  6.   glrotatef(angleZ, 0.0,0.0,1.0);
  7.  
  8.   glscalef(0.01,0.01,0.01);
  9.  
  10.   mesh1.Render;
  11. glpopmatrix();


Was ich aber eigentlich möchte ist, nicht das Objekt drehen, sondern die Kamera oder eben die ganze Welt um mich herum.
Ich dachte, dass das passieren müsste, wenn ich das Objekt zuerst verschieben und dann drehe statt umgekehrt. Aber das zeigt leider keine Wirkung.

Hat jemand eine Idee, vielleicht einen komplett anderen Ansatz, eine Referenz?

Freu mich über jede Antwort!
Danke!

Gruß Thassilo


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jan 10, 2007 19:35 
Offline
DGL Member

Registriert: Sa Okt 22, 2005 20:24
Beiträge: 291
Wohnort: Frauenfeld/CH
du musst zuerst in die Matrix GL_PROJECTION wechseln (das ist in quasi die kamera), das geht dann so:

glMatrixMode(GL_PROJECTION);
glLoadIdentity;
gluPerspective(FOV,Aspect, nearclip, farclip);
glRotatef(angle, 1,0,0);
glMatrixMode(GL_MODELVIEW);

am schluss musst du wieder zurückwechseln in die "Welt-Matrix" .
glLoadIdentity wird aufgerufen um die neutrale Matrize zu laden, somit kannst du das ganze immer ändern
Bei gluPerspective handelt es sich um einen Befehl, der quasi die Kamera festlegt, schau aber gescheiter in der Wiki nach.
hier kannst du einfach einen winkel angeben, in grad und dann dreht er.

mfg

_________________
bester uo-shard: www.uosigena.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jan 10, 2007 22:09 
Offline
DGL Member

Registriert: Di Jun 06, 2006 09:59
Beiträge: 474
Das würde ich nicht so machen. Die Projektionsmatrix sollte imo nur für öffnungswinkel, etc abhängen. Ich würde eher erst drehen dann verschieben. Siehe die verschiedenen matrixtuts.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 11, 2007 02:07 
Offline
DGL Member

Registriert: Fr Dez 08, 2006 14:27
Beiträge: 12
könnt ihr so ein grobes Beispiel geben?
ich bekomm das irgendwie nicht richtig hin.

mit vorangestelltem

glMatrixMode(GL_PROJECTION);

transformiert
Code:
  1. glpushmatrix();
  2.   gltranslatef(positionX, positionY, positionZ);
  3.  
  4.   glrotatef(angleX, 1.0,0.0,0.0);
  5.   glrotatef(angleY, 0.0,1.0,0.0);
  6.   glrotatef(angleZ, 0.0,0.0,1.0);
  7.  
  8.   glscalef(0.01,0.01,0.01);
  9. glpopmatrix();

die Welt und mit

glMatrixMode(GL_MODELVIEW);

das Objekt, oder wie?


danke!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 11, 2007 09:04 
Offline
DGL Member

Registriert: Di Jun 06, 2006 09:59
Beiträge: 474
Code:
  1. glpushmatrix();
  2.  
  3.   glrotatef(angleX, 1.0,0.0,0.0);
  4.   glrotatef(angleY, 0.0,1.0,0.0);
  5.   glrotatef(angleZ, 0.0,0.0,1.0);
  6.  
  7.   gltranslatef(positionX, positionY, positionZ);
  8.  
  9.   glscalef(0.01,0.01,0.01);
  10.  
  11.   mesh1.Render;
  12. glpopmatrix();

Vllt ist das das was du willst, aber für weitere hilfen solltest du deinen Wunsch genauer beschreiben. Außerdem solltest du dir das 2. Matrixtutorial ansehen da wird sowas glaube ich erklärt.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 11, 2007 10:02 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Es ist das selbe ob ich das Objekt drehe oder die Welt. Der unterschied ist einfach nur was noch gedreht wird. Wenn du so wie in deinem Code natürlich nur den Mesh beeinflusst, dann dreht sich nur dieser. Wenn du aber die Rotation machst und dann die Komplette Welt zeichnest - na was ist dann alles gedreht? Richtig die Welt.

ich glaube Phobeus hatte das sogar in einem Tutorial geschrieben. Nach dem Motto, dreh ich mich um die Welt oder die welt um mich.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 11, 2007 10:21 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 27, 2005 12:44
Beiträge: 393
Wohnort: Berlin
Programmiersprache: Java, C++, Groovy
Oder frei nach Einstein : Alles ist relativ :D

@Thassil0 Wenn deine 'Welt' aus einem Mesh besteht, dann ist sie auch nichts weiter als ein Objekt, also musst du sie auch wie ein Objekt drehen und verschieben.

Viele Grüße
dj3hut1


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 11, 2007 14:43 
Offline
DGL Member

Registriert: Fr Dez 08, 2006 14:27
Beiträge: 12
kk - ich muss mich falsch ausgedrückt haben. - Aber schon mal großes Dank für die Bemühungen.

Also richtig ist, momentan ist Mesh1 mein einziges Objekt, damit aber nicht meine Welt.

Wenn ich das Objekt nämlich verschiebe, möchte ich NICHT, dass der Fixpunkt zu dem rotiert wird, mitverschoben wird.
Momentan ist es ja so, dass ich mein Objekt bewege und danach drehe, dann hat sich das Objekt zwar von der Stelle bewegt, aber um die eigene Achse gedreht. Was ich möchte ist eine Drehung um den Koordinatenursprung. Ich möchte das Objekt bewegen und dann sehen, dass es um MICH dreht und nicht um die eigene Achse.

Versteht ihr was ich meine? *am kopfkratz...* - Wie bei der Bewegung im Ego-Shooter.

Gruß Thassilo

P.S.: Die ersten Tutorials hab ich gelesen. Langsam hab ich aber das Gefühl, ich hab was falsch verstanden.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 11, 2007 16:24 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Der unterschied ist dachte ich im Matrix2 Tutorial in den Bildern zu erkennen.

Wenn du zuerst rotierst und dann verschiebst, dann rotiert das Objekt um dich herum. Wenn du's andersrum machst, dann rotiert es um die eigene Achse in einiger entfernung.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 11, 2007 19:11 
Offline
DGL Member

Registriert: Fr Dez 08, 2006 14:27
Beiträge: 12
juhuu - es klappt!! - danke Euch!

das mit der Reihenfolge dachte ich mir schon - aber irgendwie hatte es nichts bewirkt. Das lag aber daran, dass ich als erstes die Matrix klein-skaliert habe ... und dann haben die anderen Transformationen nicht mehr viel bewirkt.

Jetzt funktioniert's!!

perfekt....

Gruß Thassilo


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


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.008s | 14 Queries | GZIP : On ]