DGL
https://delphigl.com/forum/

Textur Perspektivenkorektur
https://delphigl.com/forum/viewtopic.php?f=20&t=11626
Seite 1 von 1

Autor:  mathias [ Fr Jan 19, 2018 18:10 ]
Betreff des Beitrags:  Textur Perspektivenkorektur

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 | 10722-mal betrachtet ]

Autor:  Vinz [ Sa Jan 20, 2018 01:29 ]
Betreff des Beitrags:  Re: Textur Perspektivenkorektur

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.

Autor:  Vinz [ Sa Jan 20, 2018 01:36 ]
Betreff des Beitrags:  Re: Textur Perspektivenkorektur

Auf was für einer Hardware entwickelst Du eigentlich?

Autor:  Vinz [ Sa Jan 20, 2018 01:37 ]
Betreff des Beitrags:  Re: Textur Perspektivenkorektur

Könntest Du mir sagen, wie groß der Performanceunterschied ist, würde mich interessieren.

Autor:  mathias [ Sa Jan 20, 2018 08:40 ]
Betreff des Beitrags:  Re: Textur Perspektivenkorektur

Intel 4000er

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

Autor:  Vinz [ Sa Jan 20, 2018 13:46 ]
Betreff des Beitrags:  Re: Textur Perspektivenkorektur

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.

Autor:  mathias [ Sa Jan 20, 2018 16:37 ]
Betreff des Beitrags:  Re: Textur Perspektivenkorektur

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 ?

Autor:  Vinz [ Mo Jan 22, 2018 00:11 ]
Betreff des Beitrags:  Re: Textur Perspektivenkorektur

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.

Autor:  mathias [ Mo Jan 22, 2018 18:24 ]
Betreff des Beitrags:  Re: Textur Perspektivenkorektur

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 ?

Seite 1 von 1 Alle Zeiten sind UTC + 1 Stunde
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/