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

Aktuelle Zeit: Mi Jul 16, 2025 21:50

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: Partikel größe und Skallierung
BeitragVerfasst: Mo Jul 30, 2007 17:33 
Offline
DGL Member

Registriert: Mi Mai 30, 2007 15:15
Beiträge: 20
Ich möchte das mein Partikel Effekt bei verschiedenen Skaliierungen gleich aussieht. ALso das Verhältnis Grösse des gesamten effekts und Partikel grösse soll gleich sein. Der Gesamte Effekt soll sich schon anpassen.

Partikel render ich so:
Code:
  1. var
  2.  Matrix: array [0.. 15] of single;
  3.  Right,Up,View: TVektor;
  4. begin
  5.   glGetFloatv( GL_MODELVIEW_MATRIX, @Matrix );//optimierung bekannt nur einmal pro render
  6.  
  7.   glBegin(GL_QUADS);
  8.   glColor4f(color[0], color[1],color[2], alpha);
  9.  
  10.   Right.x := Matrix[0];
  11.   Right.y := Matrix[4];
  12.   Right.z := Matrix[8] ;
  13.   Up.x := Matrix[1];
  14.   Up.y := Matrix[5];
  15.   Up.z  := Matrix[9];
  16.   View.x := Matrix[2];
  17.   View.y := Matrix[6];
  18.   View.z := Matrix[10];
  19.  
  20.   glNormal3f(View.x,View.y,View.z);
  21.   size := 1.0;
  22.  
  23.   glTexCoord2f(0,0);
  24.   glVertex3f(x+Up.x*size, y+Up.y*size, z+Up.z*size);
  25.   glTexCoord2f(0,1);
  26.   glVertex3f( x+0, y+0,z+0);
  27.   glTexCoord2f(1,1);
  28.   glVertex3f(x+Right.x*size, y+Right.y*size, z+Right.z*size);
  29.   glTexCoord2f(1,0);
  30.   glVertex3f(x+(Right.x+Up.x)*size, y+(Right.y+Up.y)*size, z+(Right.z+Up.z)*size);
  31.   glEnd();


noch ein Bild zur verdeutlichung.


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Aug 02, 2007 13:51 
Offline
DGL Member

Registriert: Mi Mai 30, 2007 15:15
Beiträge: 20
kann man die Skalierung aus der Transformationmatrix ermitteln?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Aug 02, 2007 14:23 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Ich muss gestehen, dass ich mich mit Partikeln nicht wirklich gut auskenne. Aber. Ist es richtig, dass du die Größe bereits mit der ModelView Matrix verrechnest? Um die Partikel so zu drehen, dass sie Richtung Betrachter zeigen ja. Aber wenn die Partikel dann gezeichnet werden, dann werden die Koordinaten ja noch einmal mit der Matrix verrechnet. Denn 0.5 * 0.5 ergeben 0.25. Und das spiegelt sich eigentlich in deinem Ergebniss wieder. Nämlich die Partikel sind viel zu klein. Wenn ich das richtig beurteile stimmt ja die Position aber die Größe halt nicht.

Die aktuellen Werte der Skalierungen findest im wiki unter glScale.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Aug 02, 2007 20:51 
Offline
DGL Member

Registriert: Mi Mai 30, 2007 15:15
Beiträge: 20
jetzt wo du es sagt. :idea:

Die Lösung (nicht optimiert):
Code:
  1.   Right.x := Matrix[0]/sqrt(sqr(Matrix[0])+sqr(Matrix[4])+sqr(Matrix[8]));
  2.   Right.y := Matrix[4]/sqrt(sqr(Matrix[0])+sqr(Matrix[4])+sqr(Matrix[8]));
  3.   Right.z := Matrix[8]/sqrt(sqr(Matrix[0])+sqr(Matrix[4])+sqr(Matrix[8]));
  4.   Up.x := Matrix[1]/sqrt(sqr(Matrix[1])+sqr(Matrix[5])+sqr(Matrix[9]));
  5.   Up.y := Matrix[5]/sqrt(sqr(Matrix[1])+sqr(Matrix[5])+sqr(Matrix[9]));
  6.   Up.z  := Matrix[9]/sqrt(sqr(Matrix[1])+sqr(Matrix[5])+sqr(Matrix[9]));
  7.   View.x := Matrix[2];
  8.   View.y := Matrix[6];
  9.   View.z := Matrix[10];


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Aug 02, 2007 22:13 
Offline
DGL Member

Registriert: Di Jun 06, 2006 09:59
Beiträge: 474
Gandalfus hat geschrieben:
jetzt wo du es sagt. :idea:

Die Lösung (nicht optimiert):
Code:
  1.   Right.x := Matrix[0]/sqrt(sqr(Matrix[0])+sqr(Matrix[4])+sqr(Matrix[8]));
  2.   Right.y := Matrix[4]/sqrt(sqr(Matrix[0])+sqr(Matrix[4])+sqr(Matrix[8]));
  3.   Right.z := Matrix[8]/sqrt(sqr(Matrix[0])+sqr(Matrix[4])+sqr(Matrix[8]));
  4.   Up.x := Matrix[1]/sqrt(sqr(Matrix[1])+sqr(Matrix[5])+sqr(Matrix[9]));
  5.   Up.y := Matrix[5]/sqrt(sqr(Matrix[1])+sqr(Matrix[5])+sqr(Matrix[9]));
  6.   Up.z  := Matrix[9]/sqrt(sqr(Matrix[1])+sqr(Matrix[5])+sqr(Matrix[9]));
  7.   View.x := Matrix[2];
  8.   View.y := Matrix[6];
  9.   View.z := Matrix[10];

Wieso musst du den selbst ausführen? Die verkleinerung macht doch die projektion dann automatisch.

_________________
Bild


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 3 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 | 14 Queries | GZIP : On ]