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

Aktuelle Zeit: So Jul 06, 2025 23:33

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



Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Eine verzweifelte Drehung !
BeitragVerfasst: So Jan 05, 2003 13:49 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jan 03, 2003 14:15
Beiträge: 36
Hallo NG,

nachdem mich SOS verrissen hat ( :oops: ) -wohl nicht zu Unrecht- habe ich mir Tuts,RedBooks etc. runter geladen und verzweifelt studiert - ich rauche aus allen Poren und kann mich bald zu SOS gesellen :twisted: ---zumindest was die Temperatur da unten anbelangt.

Ich habe immer noch ein DREHUNGSPROBLEM, obwohl ich das TUT gelesen habe - ich verstehe es .... und auch nicht. Es funktioniert aber trotzdem nix !!! :roll:

Hier der Code:

Code:
  1.  
  2.  
  3.  
  4.  
  5. const
  6.  
  7.    Rotate_Local_X = 1;
  8.  
  9.    Rotate_Local_Y = 2;
  10.  
  11.    Rotate_Local_Z = 3;
  12.  
  13.    Rotation_Speed = 0.8;
  14.  
  15.    Move_Speed = 0.02;
  16.  
  17.  
  18.  
  19.  
  20.  
  21. implementation
  22.  
  23.  
  24.  
  25. procedure SetDCPixelFormat(Handle:HDC);
  26.  
  27.   .. Initialisierung
  28.  
  29.  
  30.  
  31. procedure DrawTheObject;
  32.  
  33.   ... Objekt, ein 3D-Dreieck
  34.  
  35.  
  36.  
  37.  
  38.  
  39. procedure UpdateRotation(RotAxis: Integer; Ang: Single);
  40.  
  41. var
  42.  
  43.   TmpMat  : TMatrix4f;
  44.  
  45. begin
  46.  
  47.   Ang := DegToRad(Ang);
  48.  
  49.  
  50.  
  51.   if RotAxis = ROTATE_LOCAL_Y then
  52.  
  53.   begin
  54.  
  55.     TmpMat := CreateRotationMatrix(LocalY, Ang);
  56.  
  57.     LocalX := VectorTransform(LocalX, TmpMat);
  58.  
  59.     LocalZ := VectorTransform(LocalZ, TmpMat);
  60.  
  61.     ObjMat := MatrixMultiply(ObjMat, TmpMat);
  62.  
  63.   end else
  64.  
  65.  
  66.  
  67.   NormalizeVector(LocalX);
  68.  
  69.   LocalY := VectorCrossProduct(LocalZ, LocalX);
  70.  
  71.   NormalizeVector(LocalY);
  72.  
  73.   LocalZ := VectorCrossProduct(LocalX, LocalY);
  74.  
  75.   NormalizeVector(LocalZ);
  76.  
  77. end;
  78.  
  79.  
  80.  
  81. procedure glDraw;
  82.  
  83. begin
  84.  
  85. //  glClearColor(0,0,0,0);
  86.  
  87. //  Den Ausgabe-Bereich und T-Buffer leeren.
  88.  
  89. //  glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  90.  
  91.  
  92.  
  93.   //Einheitsmatrix wiederherstellen.
  94.  
  95.  
  96.  
  97.   glLoadIdentity;
  98.  
  99.  
  100.  
  101.   // Das Objekt positionieren.
  102.  
  103.   glTranslate( PosVect[0],  PosVect[1],  PosVect[2]);
  104.  
  105.  
  106.  
  107.   // Das Koordinatensystemzeichnen.
  108.  
  109. //  DrawCoordSys;
  110.  
  111.  
  112.  
  113.   // Die Matrix für die Korrekte Positionierung des Objektes setzen.
  114.  
  115.   glMultMatrixf(@ObjMat);
  116.  
  117.  
  118.  
  119.   //Das Objekt und das lokale Koodrinaten-System zeichnen.
  120.  
  121.   DrawTheObject;
  122.  
  123.  
  124.  
  125.   swapbuffers(DC);
  126.  
  127.  
  128.  
  129. end;
  130.  
  131.  
  132.  
  133. procedure TForm1.Button1Click(Sender: TObject);
  134.  
  135. begin
  136.  
  137.   LocalX[0]:=1;
  138.  
  139.   LocalX[1]:=0;
  140.  
  141.   LocalX[2]:=0;
  142.  
  143.  
  144.  
  145.   LocalY[0]:=0;
  146.  
  147.   LocalY[1]:=1;
  148.  
  149.   LocalY[2]:=0;
  150.  
  151.  
  152.  
  153.   LocalZ[0]:=0;
  154.  
  155.   LocalZ[1]:=0;
  156.  
  157.   LocalZ[2]:=1;
  158.  
  159.  
  160.  
  161.   dc:=getdc(form1.handle);
  162.  
  163.   setdcpixelformat(DC);
  164.  
  165.   glClearColor(0.6,0.6,0.6,1);
  166.  
  167.   glclear(GL_color_buffer_bit or gl_depth_buffer_bit);
  168.  
  169.  
  170.  
  171.   HRC:=wglCreateContext(dc);
  172.  
  173.   wglMakeCurrent(dc,HRC);
  174.  
  175.   ObjMat:=IdentityHmgMatrix;
  176.  
  177.   gldraw;
  178.  
  179.   wglMakeCurrent(0,0);
  180.  
  181.  
  182.  
  183. end;
  184.  
  185.  
  186.  
  187. procedure TForm1.Button1KeyPress(Sender: TObject; var Key: Char);
  188.  
  189.  
  190.  
  191.       UpdateRotation(Rotate_Local_Y,Rotation_Speed);
  192.  
  193.  
  194.  
  195.  


Ich hoffe, Programm in dieser Grössenordnung darf man direkt posten :lol:

Die Szene erscheint, aber um die eigene Achse dreht sich nix - nach meinem Verständnis sollte sich da aber was tun.

Noch was: SOS scheint hier eine wahre Fundgrube zu sein und engagiert sich hier ganz schön stark, so weit ich das Forum nun verfolge. Ich denke, wir sollten mal D A N K E an ihm und auch an die jetzt nicht genannten sagen.

Gruß

Markus


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 06, 2003 08:56 
Offline
DGL Member

Registriert: Do Mai 30, 2002 18:48
Beiträge: 1617
also so direkt wirkt das so als müsste das funktionieren - die szene zeichnest du auch ab und an neu und update rotation rufst du auch in zeitintervallen auf? Dem ist nämlich u.U. nicht so.
Dann ist mir noch aufgefallen:
Code:
  1.  
  2.  
  3. glMultMatrixf(@ObjMat);
  4.  
  5.  

Solche Arraypointer machen bei mir erfahrungsgemäß immer wieder probleme und ich hab mir angewöhnt explizit immer auf das erste element zu zeigen - teste mal:
Code:
  1.  
  2.  
  3. glMultMatrixf(@ObjMat[0,0]);
  4.  
  5.  


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 06, 2003 11:08 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jan 03, 2003 14:15
Beiträge: 36
Hallo,

ich habe das mal ausprobiert - rührt sich nix.

Die Abfrage habe ich über nen Timer gemacht:
Code:
  1.  
  2.  
  3.   var kk : char;
  4.  
  5. begin
  6.  
  7.   kk:='a';
  8.  
  9.   Form1.FormkeyPress(Form1,kk);
  10.  
  11.   wglMakeCurrent(dc,HRC);
  12.  
  13.   ObjMat:=IdentityHmgMatrix;
  14.  
  15.   gldraw;
  16.  
  17.   wglMakeCurrent(0,0);
  18.  
  19.  


Kann es daran liegen ?


Gruß

Markus


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 06, 2003 11:43 
Offline
DGL Member

Registriert: Do Mai 30, 2002 18:48
Beiträge: 1617
Code:
  1. ObjMat:=IdentityHmgMatrix;

Wenn du die Objektsmatrix bei jedem Frame mit der Identitätsmatrix überschreibst, und auch nicht mit unterschiedlichen Winkeln rotierst, wird sich nicht viel ändern. Du berechnest zwar immer lustig die Sachen von neu, berechnest aber immer das gleiche, wenn ich dein Programm richtig überblicke.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 06, 2003 14:26 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jan 03, 2003 14:15
Beiträge: 36
:oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops:

Hallo,

Bull Sh.. ... das war die ganze Ursache. Jetzt funzts !!!! Und das mit der Drehung geht dank SOS nun auch recht gut. Manchmal ist es gut jemanden zu verreissen ... er soll sich aber hüten. Irgendwann hole ich das auf.....

Nochmals: Dank an SOS und DELPHIC -- ohne Euch wäre das Leben nur halb so schön. :wink:

Gruss


Markus


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


Wer ist online?

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