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

Aktuelle Zeit: So Jul 13, 2025 21:01

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



Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Einfaches Drehen? [gelöst]
BeitragVerfasst: Fr Feb 09, 2007 12:03 
Offline
DGL Member

Registriert: Mi Jan 11, 2006 18:10
Beiträge: 8
Servus!

Die Realisierung meines recht einfachen Projekts lässt mich auf große Schwierigkeiten beim weiteren Ausbau schließen.
Ich beschreibe es mal in 2D, dann wird das Ganze verständlicher.
Ein Rechteck, 5 Einheiten breit, 1 Einheit hoch liegt im Koordinatenursprung bei 0,0. Ich zeichne es nochmals, diesmal nach rechts versetzt, auf 5,0. Dieses 2. Rechteck soll nun (langsam) um den Punkt 5,1 gegen den Uhrzeigersinn gedreht werden.
Mir fiel nun keine bessere Lösung ein, als den Koordinatenursprung über trigonometrische Berechnungen auf die jeweilige linke, untere Ecke des Rechtecks zu legen, Nun ja, das geht schon, aber was passiert, wenn ich am gedrehten Rechteck weitere Objekte, die sich zudem auch noch bewegen, anbringen möchte, oder um andere Punkte und andere Achsen drehen will? Da muß es doch etwas Besseres geben!
Zum Abschluß noch den Programmabschnitt, vielleicht macht der das Geschilderte (und das Problem) deutlicher.
Code:
  1.  
  2. procedure TForm1.Render;
  3. var
  4.   Zeile: Integer;
  5.   dx, dy: Real;
  6. begin
  7.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  8.   glMatrixMode(GL_PROJECTION);
  9.   glLoadIdentity();
  10.   gluPerspective(Int(PerspektivWinkel), ClientWidth/ClientHeight, NearClipping, FarClipping);
  11.   glMatrixMode(GL_MODELVIEW);
  12.   glLoadIdentity();
  13.  
  14.   glTranslatef(Int(Tfx), Int(Tfy), Int(Tfz));//zur Betrachtungs-Positionierung
  15.   glColor3f(0,1,0);
  16.   glBegin(GL_LINE_LOOP);
  17. //1. "Balken"
  18.     for Zeile:=0 to length(Balken[2])-1 do
  19.     begin
  20.       glVertex3f(Balken[0,Zeile], Balken[1,Zeile], Balken[2,Zeile]);
  21.     end;
  22.   glEnd();
  23.  
  24. //Berechnung des neuen Usrprungs
  25.     dx:=sin(DegToRad(Winkel));
  26.     dy:=1-cos(DegToRad(Winkel));
  27.     glTranslatef(5+dx,dy,0);
  28.     glRotatef(Winkel,Int(x),Int(y),Int(z));//x,y und z geben Endpunkt des Drehachsenvektors an
  29.     glTranslatef(0,0,0);
  30.     glColor3f(0,1,1);
  31.     glBegin(GL_LINE_LOOP);
  32. //2. "Balken"
  33.       for Zeile:=0 to length(Balken[2])-1 do
  34.       begin
  35.         glVertex3f(Balken[0,Zeile], Balken[1,Zeile], Balken[2,Zeile]);
  36.       end;
  37.     glEnd();
  38.  
  39.   SwapBuffers(DC);
  40. end;
  41.  


Gruß,

Adrian

EDIT:
sniper: Pascal Tags hinzugefügt


Zuletzt geändert von Adrian am Fr Feb 09, 2007 12:42, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Feb 09, 2007 12:16 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jun 20, 2003 13:59
Beiträge: 134
hallö
ich versuchs mal ohne deinen code anzuschaun :wink:

1. Problem:

- erstes rechteck zeichnen bei 0,0
- mit gltranslatef(5,1,0) zum punkt 5,1 wechseln
- glrotate für die drehung aufrufen
- mit gltranslatef(5,-1,0) zu der position an der das zweite rechteck gezeichnet werden soll wechseln
- zweites rechteck zeichnen und siehe da es dreht sich um 5,1

2. Problem

Wenn du weitere Objekte zeichnen willst die sich unterschiedlich drehen solltest du dir mal
glPushMatrix und glPopMatrix anschaun

ich hoffe das ich dir irgendwie helfen konnte oder dir den richtigen ansatz gegeben habe.

_________________
ghost-site.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Paßt!
BeitragVerfasst: Fr Feb 09, 2007 12:41 
Offline
DGL Member

Registriert: Mi Jan 11, 2006 18:10
Beiträge: 8
Servus!

Danke, ja so gehts!
Daß ich mich mit Push und Pop befassen werde ist klar, nur dachte ich, daß es beim vorliegenden Fall auch ohne gehen muß.

Gruß, Adrian


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 9 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.010s | 17 Queries | GZIP : On ]