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

Aktuelle Zeit: Fr Jul 18, 2025 14:19

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



Ein neues Thema erstellen Auf das Thema antworten  [ 21 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: Sa Jul 30, 2005 08:40 
Offline
DGL Member

Registriert: Fr Jul 29, 2005 10:40
Beiträge: 11
so hier ma der neue Code: ( der geht aber immer noch nicht) :(

Code:
  1.  
  2. procedure TOpenglwindow.RotateVectorCPU(wx,wy,wz:single;var x1,x2,x3:Tvector);
  3. var tx1,tx2,tx3:Tvector;
  4. begin
  5.   tx1[0]:=1*x1[0]+0*x2[0]+0*x3[0];
  6.   tx1[1]:=1*x1[1]+0*x2[1]+0*x3[1];
  7.   tx1[2]:=1*x1[2]+0*x2[2]+0*x3[2];
  8.   tx2[0]:=0*x1[0]+cos(degtorad(wx))*x2[0]-sin(degtorad(wx))*x3[0];
  9.   tx2[1]:=0*x1[1]+cos(degtorad(wx))*x2[1]-sin(degtorad(wx))*x3[1];
  10.   tx2[2]:=0*x1[2]+cos(degtorad(wx))*x2[2]-sin(degtorad(wx))*x3[2];
  11.   tx3[0]:=0*x1[0]+sin(degtorad(wx))*x2[0]+cos(degtorad(wx))*x3[0];
  12.   tx3[1]:=0*x1[1]+sin(degtorad(wx))*x2[1]+cos(degtorad(wx))*x3[1];
  13.   tx3[2]:=0*x1[2]+sin(degtorad(wx))*x2[2]+cos(degtorad(wx))*x3[2];
  14.  
  15.   x1[0]:=cos(degtorad(wy))*tx1[0]+0*tx2[0]-sin(degtorad(wy))*tx3[0];
  16.   x1[1]:=cos(degtorad(wy))*tx1[1]+0*tx2[1]-sin(degtorad(wy))*tx3[1];
  17.   x1[2]:=cos(degtorad(wy))*tx1[2]+0*tx2[2]-sin(degtorad(wy))*tx3[2];
  18.   x2[0]:=0*tx1[0]+1*tx2[0]+0*tx3[0];
  19.   x2[1]:=0*tx1[1]+1*tx2[1]+0*tx3[1];
  20.   x2[2]:=0*tx1[2]+1*tx2[2]+0*tx3[2];
  21.   x3[0]:=sin(degtorad(wy))*tx1[0]+0*tx2[0]+cos(degtorad(wy))*tx3[0];
  22.   x3[1]:=sin(degtorad(wy))*tx1[1]+0*tx2[1]+cos(degtorad(wy))*tx3[1];
  23.   x3[2]:=sin(degtorad(wy))*tx1[2]+0*tx2[2]+cos(degtorad(wy))*tx3[2];
  24.  
  25.   tx1[0]:=cos(degtorad(wz))*x1[0]-sin(degtorad(wz))*x2[0]+0*x3[0];
  26.   tx1[1]:=cos(degtorad(wz))*x1[1]-sin(degtorad(wz))*x2[1]+0*x3[1];
  27.   tx1[2]:=cos(degtorad(wz))*x1[2]-sin(degtorad(wz))*x2[2]+0*x3[2];
  28.   tx2[0]:=sin(degtorad(wz))*x1[0]+cos(degtorad(wz))*x2[0]+0*x3[0];
  29.   tx2[1]:=sin(degtorad(wz))*x1[1]+cos(degtorad(wz))*x2[1]+0*x3[1];
  30.   tx2[2]:=sin(degtorad(wz))*x1[2]+cos(degtorad(wz))*x2[2]+0*x3[2];
  31.   tx3[0]:=0*x1[0]+0*x2[0]+1*x3[0];
  32.   tx3[1]:=0*x1[1]+0*x2[1]+1*x3[1];
  33.   tx3[2]:=0*x1[2]+0*x2[2]+1*x3[2];
  34.   x1[0]:=tx1[0];
  35.   x1[1]:=tx1[1];
  36.   x1[2]:=tx1[2];
  37.   x2[0]:=tx2[0];
  38.   x2[1]:=tx2[1];
  39.   x2[2]:=tx2[2];
  40.   x3[0]:=tx3[0];
  41.   x3[1]:=tx3[1];
  42.   x3[2]:=tx3[2];
  43. end;


das muss jetzt aber wirklich der theorie nach
dem entsprechen
Code:
  1.  
  2. xm[0]:=1;
  3.   xm[1]:=0;
  4.   xm[2]:=0;
  5.   xm[3]:=0;
  6.   xm[4]:=0;
  7.   xm[5]:=cos(degtorad(wx));
  8.   xm[6]:=sin(degtorad(wx));
  9.   xm[7]:=0;
  10.   xm[8]:=0;
  11.   xm[9]:=-sin(degtorad(wx));
  12.   xm[10]:=cos(degtorad(wx));
  13.   xm[11]:=0;
  14.   xm[12]:=0;
  15.   xm[13]:=0;
  16.   xm[14]:=0;
  17.   xm[15]:=1;
  18.   ym[0]:=cos(degtorad(wy));
  19.   ym[1]:=0;
  20.   ym[2]:=-sin(degtorad(wy));
  21.   ym[3]:=0;
  22.   ym[4]:=0;
  23.   ym[5]:=1;
  24.   ym[6]:=0;
  25.   ym[7]:=0;
  26.   ym[8]:=sin(degtorad(wy));
  27.   ym[9]:=0;
  28.   ym[10]:=cos(degtorad(wy));
  29.   ym[11]:=0;
  30.   ym[12]:=0;
  31.   ym[13]:=0;
  32.   ym[14]:=0;
  33.   ym[15]:=1;
  34.   zm[0]:=cos(degtorad(wz));
  35.   zm[1]:=sin(degtorad(wz));
  36.   zm[2]:=0;
  37.   zm[3]:=0;
  38.   zm[4]:=-sin(degtorad(wz));
  39.   zm[5]:=cos(degtorad(wz));
  40.   zm[6]:=0;
  41.   zm[7]:=0;
  42.   zm[8]:=0;
  43.   zm[9]:=0;
  44.   zm[10]:=1;
  45.   zm[11]:=0;
  46.   zm[12]:=0;
  47.   zm[13]:=0;
  48.   zm[14]:=0;
  49.   zm[15]:=1;
  50.   glMatrixMode(GL_MODELVIEW);
  51.   glloadidentity;
  52.   glmultmatrixf(@xm);
  53.   glmultmatrixf(@ym);
  54.   glmultmatrixf(@zm);
  55.   glgetfloatv(GL_MODELVIEW_MATRIX,@tm);
  56.   self.View.bx[0]:=tm[0];
  57.   self.View.bx[1]:=tm[4];
  58.   self.View.bx[2]:=tm[8];
  59.   self.View.by[0]:=tm[1];
  60.   self.View.by[1]:=tm[5];
  61.   self.View.by[2]:=tm[9];
  62.   self.View.bz[0]:=tm[2];
  63.   self.View.bz[1]:=tm[6];
  64.   self.View.bz[2]:=tm[10];
  65.  

so... und die 0*x1 schreib ich erstma immer mit hin damit ich die Matrizen besser kontrollieren kann ob ich nicht was vergessen hab. Gibt es wirklich keinen Fehler im Code. So langsam hab ich das Gefühl ich seh den Wald vor lauter Bäumen nicht. so und hier ma noch paar zahlen (1.=erste Variante;2.=zweite Variante und am anfang stehen die 3 Winkel wx,wy,wz)
Zitat:
09:36:22 -[Info] 1: 0 0 0 | 1 0 0 | 0 1 0 | 0 0 1
09:36:22 -[Info] 2: 0 0 0 | 1 0 0 | 0 1 0 | 0 0 1
09:36:23 -[Info] 1: 10 0 0 | 1 0 0 | 0 0,984807729721069 -0,173648178577423 | 0 0,173648178577423 0,984807729721069
09:36:23 -[Info] 2: 10 0 0 | 1 0 0 | 0 0,984807729721069 -0,173648178577423 | 0 0,173648178577423 0,984807729721069
09:36:27 -[Info] 1: 0 0 0 | 1 0 0 | 0 1 0 | 0 0 1
09:36:27 -[Info] 2: 0 0 0 | 1 0 0 | 0 1 0 | 0 0 1
> 09:36:30 -[Info] 1: 0 -10 0 | 0,984807729721069 0 0,173648178577423 | 0 1 0 | -0,173648178577423 0 0,984807729721069
> 09:36:30 -[Info] 2: 0 -10 0 | 0,984807729721069 0 -0,173648178577423 | 0 1 0 | 0,173648178577423 0 0,984807729721069
09:36:37 -[Info] 1: 0 0 0 | 1 0 0 | 0 1 0 | 0 0 1
09:36:37 -[Info] 2: 0 0 0 | 1 0 0 | 0 1 0 | 0 0 1
> 09:36:38 -[Info] 1: 0 10 0 | 0,984807729721069 0 -0,173648178577423 | 0 1 0 | 0,173648178577423 0 0,984807729721069
> 09:36:38 -[Info] 2: 0 10 0 | 0,984807729721069 0 0,173648178577423 | 0 1 0 | -0,173648178577423 0 0,984807729721069
09:36:40 -[Info] 1: 0 0 0 | 1 0 0 | 0 1 0 | 0 0 1
09:36:40 -[Info] 2: 0 0 0 | 1 0 0 | 0 1 0 | 0 0 1
09:36:41 -[Info] 1: -10 0 0 | 1 0 0 | 0 0,984807729721069 0,173648178577423 | 0 -0,173648178577423 0,984807729721069
09:36:41 -[Info] 2: -10 0 0 | 1 0 0 | 0 0,984807729721069 0,173648178577423 | 0 -0,173648178577423 0,984807729721069
09:36:41 -[Info] 1: -20 0 0 | 1 0 0 | 0 0,939692616462707 0,342020153999329 | 0 -0,342020153999329 0,939692616462707
09:36:41 -[Info] 2: -20 0 0 | 1 0 0 | 0 0,939692616462707 0,342020153999329 | 0 -0,342020153999329 0,939692616462707
09:36:43 -[Info] 1: -30 0 0 | 1 0 0 | 0 0,866025388240814 0,5 | 0 -0,5 0,866025388240814
09:36:43 -[Info] 2: -30 0 0 | 1 0 0 | 0 0,866025388240814 0,5 | 0 -0,5 0,866025388240814
> 09:36:46 -[Info] 1: -30 10 0 | 0,984807729721069 0,0868240892887116 -0,150383725762367 | 0 0,866025388240814 0,5 | 0,173648178577423 -0,492403864860535 0,852868497371674
> 09:36:46 -[Info] 2: -30 10 0 | 0,984807729721069 0 0,173648178577423 | -0,0868240892887116 0,866025388240814 0,492403864860535 | -0,150383725762367 -0,5 0,852868497371674
> 09:36:50 -[Info] 1: -30 20 0 | 0,939692616462707 0,171010076999664 -0,296198129653931 | 0 0,866025388240814 0,5 | 0,342020153999329 -0,469846308231354 0,813797652721405
> 09:36:50 -[Info] 2: -30 20 0 | 0,939692616462707 0 0,342020153999329 | -0,171010076999664 0,866025388240814 0,469846308231354 | -0,296198129653931 -0,5 0,813797652721405
> 09:36:50 -[Info] 1: -30 30 0 | 0,866025388240814 0,25 -0,433012694120407 | 0 0,866025388240814 0,5 | 0,5 -0,433012694120407 0,75
> 09:36:50 -[Info] 2: -30 30 0 | 0,866025388240814 0 0,5 | -0,25 0,866025388240814 0,433012694120407 | -0,433012694120407 -0,5 0,75


Überall wo ein > ist, ist ein Fehler, so ich hoffe das kann die Suche nach dem Fehler voranbringen.

PS.: Ich bedank mich nochmal für die Hilfe is Klasse :D


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jul 30, 2005 09:11 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Apr 25, 2005 17:51
Beiträge: 464
mach mal folgende Reihenfolge:

1. Speichere x1 in tx1, x2 in tx2 und x3 in tx3, wirklich direkt rumkopieren und noch keine Berechnungen vornehmen

2. Berechne die erste Transformation, die Werte liest du aus tx1,tx2 und tx3 und die neuen Werte schreibst du in x1,x2,x3

3. Speichere die neuen x1,x2 und x3 wieder direkt in tx1,tx2 und tx2

4. Berechne die zweite Transformation aus tx1,tx2 und tx3 und speicherst diese in x1,x2,x3

5. u. 6 dasselbe Spielchen für die 3. Berechnung

Du siehst das ist fast nur Copy and Paste, daher würde sich ne Klasse TMatrix lohnen, welche Matrizenmuzltiplikation beherrscht ... oder zumindest eine Funktion welche die Multiplikation beherrscht, wenn du keine extra Klasse möchtest. So hättest du nur die Aufrufe der Funktion in deiner Rotation.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jul 30, 2005 09:47 
Offline
DGL Member

Registriert: Fr Jul 29, 2005 10:40
Beiträge: 11
aber ehrlich gesagt mach ich doch das selbe:

ich berechne tx1 aus den orginal x1 werten und tx2 aus x2...
und dann berechne ich im 2. schritt aus tx1 und tx2, x1 und x2
und dann berechne ich aus x1 und x2 wieder tx1 und tx2
diese übergeb ich wieder an x1 und x2

und das alles natürlich auch für x3 und tx3

das is doch das selbe wie das von Pellaeon

hmm daran kann es nicht liegen ...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jul 30, 2005 11:59 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Apr 25, 2005 17:51
Beiträge: 464
nochmal zum Verständnis: das x1,x2 und x3 sind das Zeilen oder Spalten? warum nimmst nicht gleich ein 2-dim. Feld?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jul 30, 2005 12:13 
Offline
DGL Member

Registriert: Fr Jul 29, 2005 10:40
Beiträge: 11
x1 sind vektoren .. so und x1[0] is die X-Komponente und x1[1] is die Y-Komponente...
und ich rechne immer mit x1 als BasisVektor (1,0,0);
und x2 (0,1,0) und x3(0,0,1) so das kann ich dann gut mit Opengl vergleichen weil das ja dann der glloadidentity Matrix entspricht


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jul 30, 2005 12:59 
Offline
DGL Member

Registriert: Fr Jul 29, 2005 10:40
Beiträge: 11
so das problem hat sich erledigt, danke für eure Hilfe:

ich hab mir jetzt ein paar proceduren geschrieben um Matrizen zu rechnen und nu geht es dann alles noch in eine klasse gepackt und fertig... ich weiß zwar bis jetzt noch nicht warum die eine proc nicht geht aber is ja auch egal :lol:


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


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.008s | 15 Queries | GZIP : On ]