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

Aktuelle Zeit: Di Jun 04, 2024 02:07

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



Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
BeitragVerfasst: So Aug 21, 2011 14:24 
Offline
DGL Member

Registriert: Sa Nov 24, 2007 11:59
Beiträge: 116
Programmiersprache: FreePascal
Moin.

Ich stehe vor einem Problem. Und zwar habe ich Parallax Occlusion Mapping implementiert, das auch so weit super funktioniert:
Bild

Jetzt habe ich aber ein Problem. Und zwar bietet das Spiel unter anderem die Möglichkeit, Objekte zu spiegeln, zu skalieren und an der Y-Achse zu verzerren. Ich berechne die Tangenten wie hier beschrieben, mit der Bitangente im Vertex Shader. Das Problem ist, dass bereits bei Achsenspiegelungen mindestens eine der Tangenten in die falsche Richtung zeigt. Einfach alles mit dem Mirror-Vektor multiplizieren geht natürlich nicht, irgendwas zeigt da immer in die falsche Richtung. Bislang habe ich auch noch nicht so wirklich was gefunden, was das Problem lösen könnte, und ich möchte ungerne alles auf der CPU machen, zumal das auch wieder neue VBOs benötigen würde - hat jemand Ideen?

Mir käme da ein höchstens noch Geometry Shader in den Sinn, allerdings verlangsamen die die Vertextransformationen um gefühlte 50%. Aber geht es auch ohne?

Wäre dankbar für Hilfe. :)

_________________
Bild


Zuletzt geändert von Ireyon am Mo Aug 22, 2011 19:55, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Tangent Space und Vertex Shader
BeitragVerfasst: Mo Aug 22, 2011 10:56 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Aug 18, 2007 18:47
Beiträge: 694
Wohnort: Köln
Programmiersprache: Java
Hi Ireyon,

bin mal über dfdx/dfdy gestolpert. Ich habs nie richtig hinbekommen aber vielleicht hast du mehr Glück.

Im 10. Post ist ein Beispiel

_________________
Es werde Licht.
glEnable(GL_LIGHTING);
Und es ward Licht.


Zitat aus einem Java Buch: "C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off"

on error goto next


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Tangent Space und Vertex Shader
BeitragVerfasst: Mo Aug 22, 2011 19:55 
Offline
DGL Member

Registriert: Sa Nov 24, 2007 11:59
Beiträge: 116
Programmiersprache: FreePascal
Damit hatte ich auch schon rumgespielt, allerdings stimmen da die Orientierungen auch nicht zwangsläufig und es ist numerisch instabil :(

naja, berechne die Tangenten jetzt im Geometry Shader, läuft schnell genug.

_________________
Bild


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Sep 01, 2011 00:30 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Nov 08, 2010 18:41
Beiträge: 769
Programmiersprache: Gestern
Bull****
Code:
  1.  
  2. poly->tangentSpaceTransform[ 0 ][ 2 ] = poly->normal[ 0 ];
  3. poly->tangentSpaceTransform[ 1 ][ 2 ] = poly->normal[ 1 ];
  4. poly->tangentSpaceTransform[ 2 ][ 2 ] = poly->normal[ 2 ];
  5.  
  6. s = ( poly->tc[ 1 ].x - poly->tc[ 0 ].x ) * ( tc.y - poly->tc[ 0 ].y );
  7. s -= ( tc.x - poly->tc[ 0 ].x ) * ( poly->tc[ 1 ].y - poly->tc[ 0 ].y );
  8. s = 1.0f / s;
  9.  
  10. temp1 = poly->verts[ 1 ] - poly->start;
  11. temp1 *= tc.y-poly->tc[0].y;
  12. temp2 = poly->verts[ 2 ] - poly->start;
  13. temp2 *= poly->tc[ 1 ].y  -poly->tc[0].y;
  14. temp3 = temp1-temp2;
  15. temp3 *= s;
  16. temp3 = normalize(temp3)
  17. poly->tangentSpaceTransform[ 0 ][ 0 ] = temp1[ 0 ];
  18. poly->tangentSpaceTransform[ 1 ][ 0 ] = temp1[ 1 ];
  19. poly->tangentSpaceTransform[ 2 ][ 0 ] = temp1[ 2 ];
  20.  
  21. temp1 = poly->verts[ 2 ] - poly->start;
  22. temp1 *= tc.x-poly->tc[0].x;
  23. temp2 = poly->verts[ 1 ] - poly->start;
  24. temp2 *= poly->tc[ 1 ].x  -poly->tc[0].x;
  25. temp3 = temp1-temp2;
  26. temp3 *= s;
  27. temp3 = normalize(temp3)
  28.  
  29. poly->tangentSpaceTransform[ 0 ][ 1 ] = temp1[ 0 ];
  30. poly->tangentSpaceTransform[ 1 ][ 1 ] = temp1[ 1 ];
  31. poly->tangentSpaceTransform[ 2 ][ 1 ] = temp1[ 2 ];
  32.  



viel spaß beim kürzen :)

hier mal für die dummies

Vertex2 = Vertex1 + (sDifference * sVector) + (tDifference * tVector)

_________________
Meine Homepage


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


Wer ist online?

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