| Autor |
Beitrag |
Chryzler
      
Beiträge: 1097
Erhaltene Danke: 2
|
Verfasst: Fr 09.09.05 19:58
Hallo,
ich hätte hier ne' Frage an die OpenGL Leute.
Ich habe mehrere Objekte, die möchte ich jetzt unabhängig voneinander Drehen.
Also etwa so:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| glBegin(GL_QUADS); ... glEnd; glRotate3f(4, 1, 1, 0);
glBegin(GL_TRIANGELS); ... glEnd; glRotate3f(2, 0, 1, 0); |
Leider funktioniert das nicht so, wie ich's mir eben vorgestellt habe
Müsste das nicht irgendwie mit den Matrizen gehen?
Danke schon mal im voraus! 
|
|
Raphael O.
      
Beiträge: 1596
VS 2013
|
Verfasst: Fr 09.09.05 20:02
du kannst die Matrix vor dem verändern "pushen" und danach wieder "poppen", dann ist sie wie im Ausgangszustand für die nächsten Matrixoperationen:
wiki.delphigl.com/index.php/GlPushMatrix
|
|
Chryzler 
      
Beiträge: 1097
Erhaltene Danke: 2
|
Verfasst: Fr 09.09.05 20:09
Also irgendwie geht's bei mir nicht.
Mein Code sieht jetzt so aus:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| glPushMatrix;
glRotatef(1, 0, 1, 0);
glBegin(GL_QUADS); glVertex3f(-50, 0, -50); glVertex3f(-50, 0, 70); glVertex3f(60, 0, 70); glVertex3f(60, 0, -50); glEnd;
glPopMatrix;
glColor3f(0.9, 0.9, 0.9); glBegin(GL_QUADS); glVertex3f(0, 0, 0); glVertex3f(0, 9, 0); glVertex3f(10, 9, 0); glVertex3f(10, 0, 0); glEnd; |
dann dürfte doch eigentlich nur der erste Quader gedreht werden, oder 
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Fr 09.09.05 20:15
Probier mal kurz das hier:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| glPushMatrix; glPushMatrix; glRotate4f(1,0,1,.2); glBegin(GL_SOMETHING); glEnd; glPopMatrix; glPushMatrix; glRotate4f(0.9,0.9,0.9,.5); glBegin(GL_SOMETHING); glEnd; glPopMatrix; glPopMatrix; |
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
Raphael O.
      
Beiträge: 1596
VS 2013
|
Verfasst: Fr 09.09.05 20:18
|
|
Chryzler 
      
Beiträge: 1097
Erhaltene Danke: 2
|
Verfasst: Fr 09.09.05 20:25
danke erst mal für die schnelle Hilfe, aber
geht immer noch nicht bzw. dreht sich überhaupt nichts.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| glPushMatrix; glRotatef(1,0,1, 0.2); glColor3f(1, 0, 0); glBegin(GL_QUADS); ... glEnd; glPopMatrix; glPushMatrix; glRotatef(0.9,0.9,0.9, 0.5); glColor3f(0, 1, 0); glBegin(GL_TRIANGLES); ... glEnd; glPopMatrix; |
glRotate4f gibt's nicht --> glRotatef
|
|
Raphael O.
      
Beiträge: 1596
VS 2013
|
Verfasst: Fr 09.09.05 20:38
das man nichts sieht könnte daran liegen, dass du nur sehr geringe Drehungen durchführst (1 Grad)
wenn sich die Objekte fortwährend drehen sollen, dann müsstest du den ersten Parameter von glRotatef als variable nehmen und beim rendern immer erhöhen, oder für eine statische drehung des objekts zu den achsen einfach einen größeren Wert wie bspw 120
weitere Infos: wiki.delphigl.com/index.php/GlRotatef
|
|
Chryzler 
      
Beiträge: 1097
Erhaltene Danke: 2
|
Verfasst: Fr 09.09.05 20:45
das Drehen funktioniert:
wenn ich die PushMatrix und PopMatrix fur das 2. Obj entferne, gehts!
Allerdings wieder beide Objekte zusammen
die erste Drehung wird sozusagen nicht beachtet.
Erst die 2. dreht dann beide zusammen 
|
|
NeoInDerMATRIX
      
Beiträge: 245
Win95, Win98(+se), WinNT, Win2000, WinME, WinXP(+pro), VISTA, Linux(SuSe), DOS [MultiMon(3)], Vista
D6 PeE + (FP 2.0l) + D3 Pe + D2005+ D2006 Arch
|
Verfasst: Fr 09.09.05 23:55
Hi,
hier so sollte es ungefair gehen.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| glClearColor(0, 0, 0, 0); glClear(gl_Color_Buffer_Bit or gl_Depth_Buffer_Bit);
glLoadIdentity;
glPushMatrix(); glRotateF(CamAngX, 1, 0, 0); glRotateF(CamAngY, 0, 1, 0); glRotateF(CamAngZ, 0, 0, 1); glTranslateF(CamPosX, CamPosY, CamPosZ); glBegin(gl_BlaBla);
glEnd(); glPopMatrix(); dann der rest ... |
Wenn ich mich jetzt irre, dann koriergt mich.
Cu
Neo
|
|
Chryzler 
      
Beiträge: 1097
Erhaltene Danke: 2
|
Verfasst: Sa 10.09.05 13:55
Super  ,
funktioniert einwandfrei!
Thnks 
|
|
NeoInDerMATRIX
      
Beiträge: 245
Win95, Win98(+se), WinNT, Win2000, WinME, WinXP(+pro), VISTA, Linux(SuSe), DOS [MultiMon(3)], Vista
D6 PeE + (FP 2.0l) + D3 Pe + D2005+ D2006 Arch
|
Verfasst: Sa 10.09.05 16:37
Hi,
welcher source hat jetzt funktioniert?
Cu
Neo
|
|
Chryzler 
      
Beiträge: 1097
Erhaltene Danke: 2
|
Verfasst: Sa 10.09.05 17:13
Hi,
der von dem Außerwählten in der Matrix
an dem glLoadIdentity hat's gelegen 
|
|
SnuffMaster23
      
Beiträge: 19
|
Verfasst: Sa 01.10.05 02:22
Hi Burschi,
du kannst dir auch einfach für jedes Objekt das du drehen willst eine eigene Matrix-Variable anlegen
(Bezeichner: array[0..15] of glFloat).
Mit glGetFloatv(@Bezeichner, GL_MODELVIEWMATRIX) kannst du die aktuelle Matrix in der Variablen speichern und
mit glLoadMatrixf(Bezeichner) kannst die Matrix im nächsten Frame wiederverwenden also:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| glLoadMatrixf(Bezeichner1); . . . glGetFloatv(@Bezeichner1, GL_MODELVIEWMATRIX);
glLoadMatrixf(Bezeichner2); . . . glGetFloatv(@Bezeichner2, GL_MODELVIEWMATRIX); |
Natürlich solltest du zuerst die Identitätsmatrix in die Variablen speichern, da sonst glaube ich NIX sinnvolles passiert (zumindest im ersten Frame).
Moderiert von Christian S.: Delphi-Tags hinzugefügt.
_________________ Nichts ist wahr - Alles ist erlaubt
|
|
NeoInDerMATRIX
      
Beiträge: 245
Win95, Win98(+se), WinNT, Win2000, WinME, WinXP(+pro), VISTA, Linux(SuSe), DOS [MultiMon(3)], Vista
D6 PeE + (FP 2.0l) + D3 Pe + D2005+ D2006 Arch
|
Verfasst: Sa 01.10.05 17:14
Hi,
@SnufMaster23: Ich möchte dir ja jetzt nicht zu nahe treten, aber die Version die du hier aufzeigen tust, ist erstens nicht die beste (schnelligkeit) und zweitens auch nicht das einfachste (Mathe). Desweiteren war die frage bereits beantwortet, woraus sich dann nicht erkennen läst wozu du das hier schreibst. Vor allem da deine source ansätze auch nicht ganz koreckt sind.
Cu
Neo
|
|
Chryzler 
      
Beiträge: 1097
Erhaltene Danke: 2
|
Verfasst: Sa 01.10.05 17:19
glPushMatrix und glPopMatrix sind da wesentlich einfacher und kompakter vom Code her.
|
|
|