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

Aktuelle Zeit: Di Jul 08, 2025 15:48

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



Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Rotation
BeitragVerfasst: Di Aug 22, 2006 19:07 
Offline
DGL Member

Registriert: So Aug 20, 2006 23:19
Beiträge: 564
Dank der Suche und der Tuts bin ich schonmal recht weit gekommen und habe die Rotation um die eigene Achse hinbekommen:
Code:
  1. procedure TForm1.Render(FrameCount:Integer);
  2. var f:Real;
  3. begin
  4.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  5.  
  6.   glMatrixMode(GL_PROJECTION);
  7.   glLoadIdentity;
  8.   gluPerspective(100.0, ClientWidth/ClientHeight, NearClipping, FarClipping);
  9.  
  10.   glMatrixMode(GL_MODELVIEW);
  11.  
  12.   glLoadIdentity();
  13.   glTranslatef(0,0,-10);
  14.   glBegin(GL_LINES);
  15.     glVertex3f(-10,0,0);
  16.     glVertex3f( 10,0,0);
  17.   glEnd;
  18.  
  19.   glBegin(GL_LINES);
  20.     glVertex3f(0,-10,0);
  21.     glVertex3f(0, 10,0);
  22.   glEnd;
  23.  
  24.   glPushMatrix();
  25.   glTranslatef(0,0,-10);
  26.   glRotatef(FrameCount,1,0,0);
  27.  
  28.   glBegin(GL_LINE_STRIP);
  29.     f := 0.0;
  30.     for i:=0 to 100 do
  31.     begin
  32.       glVertex3f(cos(f)*5,sin(f)*5,0);
  33.       f := f + (2*Pi/100);
  34.     end;
  35.   glEnd;
  36.   glPopMatrix();
  37.  
  38.   glPushMatrix();
  39.   glTranslatef(0,0,-10);
  40.   glRotatef(FrameCount,0,1,0);
  41.   glBegin(GL_LINE_STRIP);
  42.     f := 0;
  43.     for i:=0 to 100 do
  44.     begin
  45.       glVertex3f(cos(f)*5,sin(f)*5,0);
  46.       f := f + (2*Pi/100);
  47.     end;
  48.   glEnd;
  49.   glPopMatrix();
  50.   SwapBuffers(DC);
  51. end;


Mein Prob is nun folgendes:
Ich setze ja beim ersten Translate meinen Anfangspunkt fest, von dem aus ich danach direkt die Zwei Koordinatenachsen zeichne.
Dann verstehe ich aber nicht, warum ich, um den ersten Kreis zu zeichnen, schon wieder meinen "Stirft" ausrichten muss?
Und dann beim Zweiten Kreis auch wieder?

Ich kann mir das irgendwie nicht bildlich vorstellen, vllt mueht sich ja einer mit mir ab ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Aug 22, 2006 20:19 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Wieso? Na weil du deine Kreise an verschiedenen Stellen haben willst, oder nicht?

Um sich das einfacher vorzustellen, solltest du die Methode zum Kreiszeichnen in ne extra Funktion auslagern, und die dann rufen. Dann siehst du, dass du 2 Mal deine Kreise positionierst.

Schau dir auch nochmal das Matrix2 Tutorial an, und versuch dann daran deinen Code nachzuvollziehen.

Ach und noch was:

Code:
  1.   glBegin(GL_LINES);
  2.     glVertex3f(-10,0,0);
  3.     glVertex3f( 10,0,0);
  4.   glEnd;
  5.  
  6.   glBegin(GL_LINES);
  7.     glVertex3f(0,-10,0);
  8.     glVertex3f(0, 10,0);
  9.   glEnd;


Man sollte seinen Code nicht unnötig langsam machen. Deshalb Blöcke zusammenfassen:
Code:
  1.   glBegin(GL_LINES);
  2.     glVertex3f(-10,0,0);
  3.     glVertex3f( 10,0,0);
  4.  
  5.     glVertex3f(0,-10,0);
  6.     glVertex3f(0, 10,0);
  7.   glEnd;


Siehe dazu auch glBegin

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Aug 22, 2006 21:31 
Offline
DGL Member

Registriert: So Aug 20, 2006 23:19
Beiträge: 564
Ich hab das Tut ja benutzt. Nu sieht es bei mir so aus:
Code:
  1.  [...]
  2.   glLoadIdentity();
  3.   glTranslatef(0,0,-10);
  4.   glBegin(GL_LINES);
  5.     glVertex3f(-10,0,0);
  6.     glVertex3f( 10,0,0);
  7.  
  8.     glVertex3f(0,-10,0);
  9.     glVertex3f(0, 10,0);
  10.   glEnd;
  11.  
  12.   glPushMatrix();
  13.   glTranslatef(0,0,-10);
  14.   glRotatef(FrameCount,1,0,0);
  15.   Kreis();
  16.   glPopMatrix();
  17.  
  18.   glPushMatrix();
  19.   glTranslatef(0,0,-10);
  20.   glRotatef(FrameCount,0,1,0);
  21.   Kreis();
  22.   glPopMatrix();
  23.   SwapBuffers(DC);
  24. [...]
  25.  


Code:
  1.  
  2. procedure TForm1.Kreis;
  3. var f:Real;
  4.     i:Integer;
  5. begin
  6.   glBegin(GL_LINE_STRIP);
  7.     f := 0.0;
  8.     for i:=0 to 100 do
  9.     begin
  10.       glVertex3f(cos(f)*5,sin(f)*5,0);
  11.       f := f + (2*Pi/100);
  12.     end;
  13.   glEnd;
  14. end;
  15.  


Aber ich ruf immernoch die Kreise mit den selben Parametern auf (btw. am ende sollen es 3 Kreise uebereinander sein, die je eine Achse umrunden)

Vllt hab ich einfach nur etwas völlig falsch verstanden, vom logischen Aspekt her.
Ich habe doch bereits beim ersten Translate (0,0,-10) gesetzt. Ich muss also jedes Objekt neu setzen? Ich dachte, wenn ich einmal den Startpunkt festgesetzt habe, dann wird dieser so lange beibehalten, bis ich einen neuen benutze


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Aug 24, 2006 12:59 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Durch das PopMatrix machst du alle änderungen an der Matrix (glTranslate/Rotate/Scale) wieder rückgängig seit dem letzten PushMatrix. Du kannst z.B. Das glTranslate(0,0,-10) auch vor das PushMatrix ziehen, und beim zweiten mal weglassen.

Schreib dir einfach mal alle glBefehle auf die du aufrufst. Dann siehst du vielleicht wieso du was setzen musst.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Aug 24, 2006 13:43 
Offline
DGL Member

Registriert: So Aug 20, 2006 23:19
Beiträge: 564
Ja aber vor den GL_Lines habe ich ja schonmal das Translate aufgerufen, deswegen versteh ich nich, warum ichs bei den Kreisen jeweils nochmal aufrufen muss


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Aug 24, 2006 14:42 
Offline
DGL Member
Benutzeravatar

Registriert: Do Aug 25, 2005 16:00
Beiträge: 189
Programmiersprache: Java, C#
Shaddow hat geschrieben:
Ja aber vor den GL_Lines habe ich ja schonmal das Translate aufgerufen, deswegen versteh ich nich, warum ichs bei den Kreisen jeweils nochmal aufrufen muss


Du zeichnest deine Linien bei dem Punkt (0, 0, -10).
Deine Kreise zeichnest du derzeit an dem Punkt (0, 0, -20).
Ich kann mir jetzt im Moment nicht vorstellen wie groß deine Kreise sind, aber ihr Mittelpunkt liegt nicht auf einer der Linien.



Will heißen: Wenn die Kreise um die Linien gezeichnet werden sollen, musst du es nicht nochmal glTranslatef aufrufen, weil du bereits an der Stelle bist.
Wenn der Mittelpunkt der Kreise jedoch nicht auf der Linie leigen soll, dann musst du es erneut aufrufen, weil du ja von der Stelle weg kommen musst.


cya
Deathball


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Aug 24, 2006 14:47 
Offline
DGL Member

Registriert: So Aug 20, 2006 23:19
Beiträge: 564
Genau das sag ich ja ^^ wenn ich das translate rausnehm sind sie ne ecke größer. Sie lagen auch vorher auf dem kreuz nur eben nicht in der tiefe, und da ich es von vorn (2d) gesehen hab, sah es so aus, als läge es auf dem Kreuz auch in der z ebene. nun liegt es dann wirklich drauf, und ich habs geschnallt ^^


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Aug 24, 2006 15:38 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Du solltest noch ne Methode zum Rotieren einbauen. Damit du dir die Szene aus nem anderen Blickwinkel angucken kannst. Dann fällt einem das Räumliche Vorstellen noch leichter.

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


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 5 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.008s | 15 Queries | GZIP : On ]