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

Aktuelle Zeit: Do Jul 03, 2025 22:47

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



Ein neues Thema erstellen Auf das Thema antworten  [ 28 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: Fr Dez 27, 2002 20:42 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
hab's brav in Bogenmaß umgerechnet :)

Das unrotierte Objekt sieht so aus:
Bild

das Rotierte dann so:
Bild

*winkt*
Aya~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Dez 27, 2002 21:14 
Offline
DGL Member

Registriert: Do Mai 30, 2002 18:48
Beiträge: 1617
lad mal irgendwo deinen code zum rotieren hoch.... meine angegeben matrizen sind genau die, die auch in opengl, und ähnlichen zum einsatz kommen. renderman hat andere - aber die drehen im uhrzeigersinn und haben auch ein geändertes koordinatensystem


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Dez 27, 2002 21:20 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Das ist der Code wo die Matrix gemacht wird:
Code:
  1.   RotateX:=RotateX*(PI/180);
  2.  
  3.   RotateY:=RotateY*(PI/180);
  4.  
  5.   RotateZ:=RotateZ*(PI/180);
  6.  
  7.   VertexArray.Matrix[1]:=cos(RotateX);
  8.  
  9.   VertexArray.Matrix[2]:=sin(RotateX);
  10.  
  11.   VertexArray.Matrix[3]:=-sin(RotateX);
  12.  
  13.   VertexArray.Matrix[5]:=-sin(RotateY);
  14.  
  15.   VertexArray.Matrix[6]:=cos(RotateY);
  16.  
  17.   VertexArray.Matrix[7]:=sin(RotateY);
  18.  
  19.   VertexArray.Matrix[9]:=sin(RotateZ);
  20.  
  21.   VertexArray.Matrix[10]:=-sin(RotateZ);
  22.  
  23.   VertexArray.Matrix[11]:=cos(RotateZ);


und hier wird das Objekt dann gezeichnet:
Code:
  1.   glPushMatrix;
  2.  
  3.   glMultMatrixf(@VertexArray.Matrix);
  4.  
  5.   glDrawArrays(GL_QUADS,0,Length(VertexArray.Vertex));
  6.  
  7.   glPopMatrix;


Au'revoir,
Aya~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Dez 27, 2002 22:33 
Offline
DGL Member

Registriert: Do Mai 30, 2002 18:48
Beiträge: 1617
waren wir nicht schonmal soweit, dass gleichzeitiges drehen um mehrere achsen unmöglich ist? und was machst du da? um mehrere Achsen gleichzeitig drehen? Oha


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Dez 28, 2002 00:17 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Ja, schon... aber auch wenn ich es anders mache, also jede rotation einzeln ändert sich nichts am end-ergebniss... das Objekt bleibt trotzdem verzerrt.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Dez 28, 2002 00:29 
Offline
DGL Member

Registriert: Do Mai 30, 2002 18:48
Beiträge: 1617
ich empfehle wieder einmal mein kamera tut <a href='http://dgl.quellcodes.de/main.php?id=2&page=tutorial&tut=kameras&print=1' target='_blank'>http://dgl.quellcodes.de/main.php?id=2&pag...kameras&print=1</a> genauer anzuschauen... besonders die sources,d a werden nämlich drehungen mithilfe von matrizen gemacht(geometry.pas kommt zum einsatz, aber die macht auch nichts anderes, als wie im tutorial beschrieben)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Dez 28, 2002 01:02 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
ok, hab's jetzt hinbekommen :)

Aber mal ne ganz andere frage.. *g* Was genau bringt mir das mit der Matrix jetzt..? Du meintest anfangs damit wäre es dann völlig egal in welcher reihenfolge ich rotiere... aber irgendwie seh ich keinen wirklichen unterschied zu davor :(


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Dez 28, 2002 01:23 
Offline
DGL Member

Registriert: Do Mai 30, 2002 18:48
Beiträge: 1617
ok, scauen wir mal zurück:
[quote=Aya]Wie errechne ich nun die neuen X,Y,Z koordinaten?[/quote]
Das geht nun ganz simpel... Blickrichtung.... Gehen wir davon aus du stellst dir dein personliches lokales koordinatensystem vor. blickrichtung negativ z, rechter arm x, richtung oben y. wenn du dich nach vorne bewegst, bewegst du dich in deinem lokalem koordinatensystem also nach negativ z.(meinetwegen 0.5).... also nimmst du einen vektor (0,0,-0.5) und wendest darauf die matrix an - schon kennst du die globale richtung um die sich deine Position veränder:
NeuePos = AltePos + V x M

ansonsten haben matrizen für objekte noch ein paar schöne eigenschaften, z.B:
- wenn eine matrix die rotation eines objekts angibt, so gibt ihre invertierte matrix das die blickrichtung an(siehe kamera tutorial)
- du kannst mit lokalen koordinatensystemen arbeiten(siehe oben)
- hast du mit matrizen die möglichkeit voneinader abhängige drehungen zu beschreiben, die du ganz simpel wieder als matrix an dein objekt binden kannst.....
- u.v.w.m., der kreativität sind kaum grenzen gesetzt... 3d grafik so wie wir sie kennen basiert halt auf matrizen, entsprechend viel ist damit möglich und lässt sich damit beschreiben.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Dez 28, 2002 01:35 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
huhu *g*

ok, ich nehm mal an ich nerv dich grad schon zu tode.. :)
Aber eine frage trotzdem noch, mir is ja klar wie ich z.B. um die Z-Achse rotiere..

Code:
  1.  &nbsp;Matrix[1]:=cos(RotateZ);
  2.  
  3.  &nbsp;Matrix[2]:=sin(RotateZ);
  4.  
  5.  &nbsp;Matrix[5]:=-sin(RotateZ);
  6.  
  7.  &nbsp;Matrix[6]:=cos(RotateZ);


aber, wenn ich jetzt das Objekt um 45° auf der Z-Achse, und um 13° auf der X-Achse rotieren will... wie geht das dann..?

also, wie errechnet man dann die neuen werte in der Matrix??

Man könnte zwar einfach 3 Matritzen machen, eine für jede Achse und die dann mit glMultMatrix verbinden, aber man kann doch auch einfach das, was glMultMatrix macht selber machen... dann spart man 2-Matritzen, ne?? Nur, was genau macht glMultMatrix??

*Anti-Mathe-Genie ist* :oops:

*winkt*
Aya~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Dez 28, 2002 02:04 
Offline
DGL Member

Registriert: Do Mai 30, 2002 18:48
Beiträge: 1617
Matrix Multiplikation ist ein stichwort das für diesen fall interessant ist.... bevor ich dir eine formel hinklatsch, die dich eh nicht weiterbringt, benutz fürn anfang lieber geometry.pas aus dem glscene projekt, das nimmt einem ordentlich arbeit ab..... generell ist diese unit eine empfehlung wert und man sollte sie nach interessanten funktionen einmal durchstöbert haben.... aber jetzt hab ich genug - mou schlafen, morgen kann ich wieder auf deine posts antworten wieder

Zitat:
ok, ich nehm mal an ich nerv dich grad schon zu tode..

Manchmal beomm ich fasts zittern ;-)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Dez 28, 2002 02:28 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
huhu,

hab die formel selber gefunden, klappt auch alles jetzt :)

Schlaf schön~~

Aya


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Dez 28, 2002 22:45 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
hab doch noch ein Problem :)

nehmen wir mal an, ein Object steh bei den Koordinaten 10,10,10... und ich möchte es um 45° drehen, allerdings möchte ich es um die Koordinaten 0,0,0 drehen.

Also so wie:
Code:
  1.  &nbsp;glTranslate(10,10,10);
  2.  
  3.  &nbsp;glCallList(Object);
  4.  
  5.  &nbsp;glTranslate(-10,-10,-10);
  6.  
  7.  &nbsp;glRotate(45,0,1,0);
  8.  
  9.  &nbsp;glTranslate(10,10,10);
  10.  
  11.  &nbsp;glCallList(RotateObject);


nur wie bekomm ich das mit ner Matrix hin? :)

Au'revoir,
Aya~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Dez 29, 2002 00:43 
Offline
DGL Member

Registriert: Do Mai 30, 2002 18:48
Beiträge: 1617
glRotate und glTranslate sind matrixfunktionen, die mit der modelview matrix arebieten... sie erzeugen eine eigene und multiplizieren sie mit der MV Matrix, genau das selbe musst du auch machen.... Wo ist das Problem?


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 28 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 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:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 14 Queries | GZIP : On ]