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

Aktuelle Zeit: Fr Jul 04, 2025 13:00

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



Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: Fr Apr 04, 2003 16:29 
Offline
DGL Member
Benutzeravatar

Registriert: So Mär 16, 2003 15:20
Beiträge: 2
Ich habe eine Prozedur für einen Würfel geschrieben wuerfel() und lasse diesen dann per tastatureingabe drehen, beim drücken der tasten routiert er; beim loslassen dann wieder zurück in seine ausgangsposition!

Code:
  1. //y-drehung
  2.   if (keys[VK_RIGHT]) then y_rotate := y_rotate + 5;
  3.   if (keys[VK_LEFT]) then y_rotate := y_rotate - 5;
  4.   if not(keys[VK_RIGHT] and keys[VK_LEFT]) then
  5.     begin
  6.       sp := false;
  7.       if y_rotate > 0 then y_rotate := y_rotate - 2;
  8.       if y_rotate < 0 then y_rotate := y_rotate + 2;
  9.     end;
  10.   //x-drehung
  11.   if (keys[VK_UP]) then x_rotate := x_rotate - 5;
  12.   if (keys[VK_DOWN]) then x_rotate := x_rotate + 5;
  13.   if not(keys[VK_UP] or keys[VK_DOWN]) then
  14.     begin
  15.       sp := false;
  16.       if x_rotate > 0 then x_rotate := x_rotate - 2;
  17.       if x_rotate < 0 then x_rotate := x_rotate + 2;
  18.     end;
  19.   //stoppen 'S'
  20.   if (keys[ord('S')] and not(sp)) then
  21.     begin
  22.     y_rotate := 0;
  23.     x_rotate := 0;
  24.     sp := true;
  25.     glLoadIdentity();
  26.     glTranslatef(0,0,-10);
  27.     end;
  28.  


dann hab ich zB eine routine
Code:
  1.  
  2.   glPushMatrix();
  3.   glRotatef(y_rotate,0,1,0);
  4.   glRotatef(x_rotate,1,0,0);
  5.   wuerfel();
  6.   glPopMatrix();
  7.  


Wenn ich das Schreiben auf den Matrix-Stack weglasse, dreht sich der Würfel viel schneller und mit extrem langsam.... hat jemand ne idee woher dieses Phänomen kommen könnte??

@phoebus: ich bin kein Sadist() :rolleyes:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Apr 04, 2003 18:59 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Mai 06, 2002 20:27
Beiträge: 479
Wohnort: Bremen
rufst du in deiner render-methode am Anfang glLoadIdentity() auf? Das solltest du nämlich um deine Matrix zu reseten - tust du es nciht wird der Würfe um die eigentliche Drehung + der vorherigen Drehung gedreht, was man eigentlich so gut wie nie haben will.

das pushen und poppen sorgt dafür, dass die änderungen and der Matrix nur temporär sind -> hat also in deinem Fall so ziemlich den selben Effekt wie glLoadIdentity. Trotzdem sollte man glLoadIdentity prinzipiell immer am anfang der rendermethode aufrufen damit der Inhalt der Matrix definiert ist.

-lith

_________________
Selber Denken macht klug!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Apr 05, 2003 09:28 
Offline
DGL Member
Benutzeravatar

Registriert: So Mär 16, 2003 15:20
Beiträge: 2
jupp hast recht,
hab das glLoadIdentity() am anfang weggelassen.... dann wird der wert nicht addiert und logischerweise wird die drehung dann langsamer oder der würfel dreht sich fast garnicht mehr!

mfg osai


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 » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 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.009s | 16 Queries | GZIP : On ]