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:
#version 330
invec4 UV0;
uniformsampler2D Sampler;
outvec4 FragColor;
void main(){
FragColor = texture( Sampler, UV0.st/ UV0.w);
// oder
FragColor =texture2DProj( Sampler, UV0 );
}
Ich denke mal, das die erste Variante Speicher sparen kann, da man dies auch mit einer vec3 anstelle von vec4 lösen kann.
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
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
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,
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
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.