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

Aktuelle Zeit: Do Mär 28, 2024 23:40

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



Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Textur Perspektivenkorektur
BeitragVerfasst: Fr Jan 19, 2018 18:10 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1276
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
Ich probiere gerade die Perspektivenkorrektur von Texturen aus.
Da bin ich auf 2 Varianten gestossen, das Endergebnis ist da selbe, man beachte nur die Rechte Meshes. Die Mesh Links ist unkorrigiert.
Code:
  1. #version 330
  2. in vec4 UV0;
  3. uniform sampler2D Sampler;    
  4. out vec4 FragColor;
  5.  
  6. void main() {
  7.   FragColor = texture( Sampler, UV0.st / UV0.w );  
  8. // oder
  9.   FragColor = texture2DProj( Sampler, UV0 );
  10. }

Ich denke mal, das die erste Variante Speicher sparen kann, da man dies auch mit einer vec3 anstelle von vec4 lösen kann.

Was ist die bessere Variante ?


Dateianhänge:
image.png
image.png [ 14.3 KiB | 10371-mal betrachtet ]

_________________
OpenGL
Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Textur Perspektivenkorektur
BeitragVerfasst: Sa Jan 20, 2018 01:29 
Offline
DGL Member

Registriert: Fr Mai 11, 2012 13:25
Beiträge: 229
Programmiersprache: c++, c, JavaScript
Die Proj-Version macht genau das, würde aber auch noch die z-Komponente behandeln, wenn Du ihr nen 4er-Vektor gibst, was sogar noch eine Division mehr kostet.
Es gibt allerdings auch eine Version, die nen 3er-Vektor konsumiert. Damit solltest Du also auch die gleiche Performance bekommen.

_________________
"Pixel, ich bin dein Vater."
-Darf Shader


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Textur Perspektivenkorektur
BeitragVerfasst: Sa Jan 20, 2018 01:36 
Offline
DGL Member

Registriert: Fr Mai 11, 2012 13:25
Beiträge: 229
Programmiersprache: c++, c, JavaScript
Auf was für einer Hardware entwickelst Du eigentlich?

_________________
"Pixel, ich bin dein Vater."
-Darf Shader


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Textur Perspektivenkorektur
BeitragVerfasst: Sa Jan 20, 2018 01:37 
Offline
DGL Member

Registriert: Fr Mai 11, 2012 13:25
Beiträge: 229
Programmiersprache: c++, c, JavaScript
Könntest Du mir sagen, wie groß der Performanceunterschied ist, würde mich interessieren.

_________________
"Pixel, ich bin dein Vater."
-Darf Shader


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Textur Perspektivenkorektur
BeitragVerfasst: Sa Jan 20, 2018 08:40 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1276
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
Intel 4000er

Für den Test muss ich erstmal ein kleines Programm coden.

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Textur Perspektivenkorektur
BeitragVerfasst: Sa Jan 20, 2018 13:46 
Offline
DGL Member

Registriert: Fr Mai 11, 2012 13:25
Beiträge: 229
Programmiersprache: c++, c, JavaScript
Mach Dir keine Umstände, Divisionen sind zwar in der Regel recht teuer, aber es ist nicht sicher, ob man den Unterschied wirklich messen kann.
Je nach Hardware ist es sogar so, dass so teuere Funktionen wie Sinus gar nichts kosten, weil der Shader anschliessend Rechenoperationen ausführt, und die Sinusberechnung parallel dazu auf sogenannten Special Function Units läuft, das Ganze also den Shader gar nicht langsamer macht.
Generell ist es aber sinnvoll, eine Performanceanzeige im Programm zu haben. Leider gilt die dann aber auch nur für die Hardware, auf der man gerade testet.

_________________
"Pixel, ich bin dein Vater."
-Darf Shader


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Textur Perspektivenkorektur
BeitragVerfasst: Sa Jan 20, 2018 16:37 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1276
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
Zitat:
Divisionen sind zwar in der Regel recht teuer,

Macht sich dies nicht wieder wett, da man für die Texturkoordinaten einen vec3 anstelle eines vec4 nehmen kann ?

Zitat:
dass so teuere Funktionen wie Sinus gar nichts kosten, weil der Shader anschliessend Rechenoperationen ausführt, und die Sinusberechnung parallel dazu auf sogenannten Special Function Units läuft,
Wie kommst du auf Sinus ?

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Textur Perspektivenkorektur
BeitragVerfasst: Mo Jan 22, 2018 00:11 
Offline
DGL Member

Registriert: Fr Mai 11, 2012 13:25
Beiträge: 229
Programmiersprache: c++, c, JavaScript
Die texture2DProj dividiert die Koordinaten ja auch, und es gibt wie gesagt eine Version davon, die einen vec3 konsumiert, diese sollte also identisch zu deiner Version sein.
Sinus war nur ein Beispiel für die Special Function Units, da ich gelesen hab, dass trigonometrische Funktionen von diesen Units berechnet werden.
Weiß nicht wie es bei Divisionen ist. Aber in diesem Fall kann der Texturefechtch eh erst erfolgen, wenn die Koordinaten berechnet sind.
Ich wollte damit nur sagen, dass die Shaderleistung kaum allgemein zu bestimmen ist.

_________________
"Pixel, ich bin dein Vater."
-Darf Shader


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Textur Perspektivenkorektur
BeitragVerfasst: Mo Jan 22, 2018 18:24 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1276
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
Zitat:
und es gibt wie gesagt eine Version davon, die einen vec3 konsumiert,

Ich habe es gerade probiert, es wird beider gefressen:
Code:
  1. in vec3 v3;
  2. in vec3 v4;
  3. FragColor = texture2DProj( Sampler, v3);
  4. FragColor = texture2DProj( Sampler, v4);

Da habe ich wohl ein schlechtes Beispiel gegoogelt.

Da werde ich die Variante mit vec4 im Tutorial auf vec3 abändern.

Könnte es sein, das es mit dem alten OpenGL nur mit glTexCoord4f( funktionierte ?

_________________
OpenGL


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 10 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.226s | 19 Queries | GZIP : On ]