Registriert: Di Apr 29, 2008 18:56 Beiträge: 1213
Programmiersprache: Delphi/FPC
Hey Leute,
ich steh grad irgendwie total auf'm Schlauch. Ich hab ne Textur mit nem 8bit Alpha-Kanal (GL_ALPHA8). Die blende ich mit glColor4f(1, 1, 1, 1) auf einen schwarzen Hintergrund. Ergebnis: weiße transparente Wolken. Nun wollt ich das mit ein paar anderen Sachen im Shader verrechnen, aber wenn ich da ein Texturlookup mit texture2D mache, dann ist rgb immer 0 und a der entsprechende Wert aus der Textur. Ich dachte immer der default-Wert für nicht vorhandene Kanäle ist 1.0, oder hab ich da was verdreht?!
Registriert: Mi Aug 14, 2013 21:17 Beiträge: 588
Programmiersprache: C++
Also ich weiß, dass wenn ich ein texture-Lookup im Shader mache, dass das Ergebnis schwarz ist, wenn ich die uniform-Variable für die Textur nicht gesetzt habe. In der glsl-spec (3.3) konnte ich nichts finden, welchen Wert texture-Lookups zurückgeben, wenn die Information in der entsprechenden Textur fehlt. Also im Zweifelsfall undefined.
Aber was hält dich davon ab, im Fragmentshader sowas zu machen:
Code:
#version 330
uniformsampler2D ColorMap;
invec2 texCoord;
outvec4 outColor;
void main(void){
outColor =vec4(1.0);
outColor.a= texture(ColorMap, texCoord).a;
}
Edit: Du scheinst mit einer älteren OpenGL-Version zu arbeiten. Da müsstest du natürlich #version, in und out anpassen, die glsl-Variable für glColor verwenden usw. Wird dich aber nicht vor Probleme stellen, denke ich.
_________________ So aktivierst du Syntaxhighlighting im Forum: [code=pascal ][/code], [code=cpp ][/code], [code=java ][/code] oder [code=glsl ][/code] (ohne die Leerzeichen)
Registriert: Di Apr 29, 2008 18:56 Beiträge: 1213
Programmiersprache: Delphi/FPC
Hey,
das geht natürlich, aber dann muss ich wieder ne extra Behandlung für Alpha-Texturen einführen, denn es können auch normale RGB(A) Teturen dort gebunden werden. Und ich bin mir eigentlich zu 99% sicher, dass das mal so ging wie in der fixed Pipeline. Ich weiß grad nur nich wo ich suchen soll :/
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Irgendwelche Texturfilter, parameter, pixelstore-dinger sind nicht aktiv?
grüße
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Registriert: Di Apr 29, 2008 18:56 Beiträge: 1213
Programmiersprache: Delphi/FPC
Hey,
eigentlich nich, ich hab auch nochma google befragt und da hab ich nen ähnlichen Thread gefunden. Da hieß es, das die Kanäle die es in der Textur nicht gibt einfach nicht gesetzt werden. Also war es purer Zufall, dass RGB bis jetzt immer 1 war :/
Registriert: Di Mai 18, 2004 16:45 Beiträge: 2623 Wohnort: Berlin
Programmiersprache: Go, C/C++
Ich hab nochmal in die GLSlang 4.0 Specs geguckt und es sieht wie folgt aus. Die initialisierung von Vektoren wird nicht vorgegeben, da kann Datenmüll drin stehen. Matrizen müssen immer als Einheitsmatrix initialisiert werden. Texturzugriffe müssen gewährleisten, dass die Wert zwischen 0.0 und 1.0 liegen, wenn es ein float Vektor ist.
Daraus folgt, dass ein Texturzugriff die Kanäle, die im Sampler verfügbar sind entsprechend beschreibt und mit den restlichen ein Wert zwischen 0.0 und 1.0 zu weist und der Wert ist vom Treiberentwickler frei wählbar.
_________________ "Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren" Benjamin Franklin
Registriert: Di Apr 29, 2008 18:56 Beiträge: 1213
Programmiersprache: Delphi/FPC
Ja, die hat nur einen Alpha Kanal. Ich seh auch dass das Blending stimmt, nur die Farbe ist schwarz anstatt weiß. Ich das jetzt so angepasst das nur der Wert der Farbe geladen wird, der auch wirklich da is.
Ich möchte an der Stelle mal darauf hinweisen, dass "GL_ALPHA8" scheinbar deprecated ist und man in moderenen OpenGL nicht mehr einsetzen sollte. Änliches Verhalten sollte man jedoch mit "GL_R8" und entsprechenden "Swizzle"-Einstellungen auch hin bekommen. Mit den Einstellungen sollte auch definiert sein, welche Werte die nicht in der Texture gespeicherten Farbkannäle haben.
Mitglieder in diesem Forum: 0 Mitglieder und 4 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.