ich brauche für mein Programm eine möglichkeit den Rot-Kanal einer Textur für R, G und B zu verwenden so das es ein Graustufen Bild wird..
Hab das im moment via glSlang gemacht und klappt auch.. nur, da ich TextureRects benutze weiß ich leider das es da auf ATI Karten probleme gibt..
(ATI Karten unterstützen sampler2DRect/texture2DRect im Shader nicht)
Deshalb, weiß jemand ob's ne gute möglichkeit gibt das ohne Shader zu lösen? Irgendein ganz tief vergrabener OpenGL Befehl evtl oder so? *g*
Aya~
PS: Weiß jemand ob, wenn ich es mit den alten ASM-Shadern mache funktioniert mit den TextureRects und ATI Karten?
umh hab mich ein wenig unglücklich ausgedrückt Also was ich speziell vorhabe ist, man hat eine normale RGB-Textur und soll dann nach wahl entweder nur den R, G oder B Kanal angezeigt bekommen.
aber halt nicht so das dann das Bild Rot ist, sondern so das es schwarz/weiß ist.
Standard:
R = R
G = G
B = B
Nur Rot Kanal:
R = R
G = R
B = R
Nur Grün Kanal
R = G
G = G
B = G
etc..
Aya~
PS: Meinst du, ich soll dann die nicht-Quadratische Textur einfach als normale GL_TEXTURE_2D laden? Wenn das so problemlos geht, wozu wurde denn dann das TextureRect eingeführt? *schaut unsicher*
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Also Texture Rectangle ist historisch bedingt aus der Zeit in der noch keinen Non Power Of Two direkt unterstützt wurden.
Und ja die kannst du so erstellen. Sofern entweder OpenGL 2.0 oder die Extension unterstützt wird. Dann hast du auch keine Probleme mehr mit dem Shader. Aber vielleicht wären da klassiche Shader auch nicht ganz verkehrt.
Aber es kann natürlich sein, dass diese Lösung so ganz geringfügig übertriebene Anforderungen stellt. Aber das kann ich nicht abschätzen.
Sonst fällt mir so auf die Schnelle auch keine Lösung ein mit der du eben mal sagst, dass du bei einer Textur den Alpha zur Luminance machen kannst. Außer du erstellst die Textur neu. Aber wie du dir denken kannst ist das neu erstellen so wahnsinnig unglaublich schnell. *ironieschildwegpack*
Das sind so die zwei Möglichkeiten die ich derzeit sehe.
Lass das mit den shadern per hand schreiben. Schreibe die besser in GLSL und benutz gegebenfalls den cgc um ihn dann zu zu kompelieren (das ist übersichtlicher und der Code wird automatisch an spätere generationen angepasst.)
ließ dann einfach aus der Textur nur den r kanal aus (ein .r da hinter) und benutze dann etwa so was:
gl_FragColor = vec4 (r,r,r,1.0);
Naja das rectangle Zeug brauch man eh nicht umbedingt. Auch normale Texturen können rechteckig sein, allerdings steicken dann alte Karten...
Registriert: Di Dez 27, 2005 12:44 Beiträge: 393 Wohnort: Berlin
Programmiersprache: Java, C++, Groovy
Hallo,
du kannst bei glTexImage2D als internal format GL_LUMINANCE oder GL_LUMINANCE_ALPHA angeben.
Der Rotkanal wird meist standardmässig als Grauwert genommen.
Falls du dir ganz sicher gehen willst, kannst du noch glPixelTransfer mit GL_RED_SCALE=1.0f, GL_GREEN_SCALE=0.0f und GL_BLUE_SCALE=0.0f aufrufen
Registriert: Di Dez 27, 2005 12:44 Beiträge: 393 Wohnort: Berlin
Programmiersprache: Java, C++, Groovy
Hallo I0n0s,
mit GL_RED, GL_GREEN oder GL_BLUE als internes Format kann man die einzelnen Farbkanäle extrahieren.
Das müsste den selben Effekt haben wie z.B. GL_RGB als internes Format und RED_SCALE=1.0f, GREEN_SCALE=BLUE_SCALE=0.0f.
Wenn man allerdings Graustufenmodus haben möchte, muss man als internes Format GL_LUMINANCE setzen (zur Not würde GL_INTENSITY vielleicht auch gehen)
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Das kommt ganz darauf an was Aya damit vor hat. Du darfst nicht vergessen. Du musst dabei die komplette Textur neu erstellen. Das ist im Vergleich zu Shadern ein doch ziemlich großer Aufwand. Sowohl zeitlich als auch speichertechnisch. Und das 25 Mal in der Sekunde zu bewerkstellingen dürfte recht langsam werden. Denn ich denke nämlich mal das soll ein Filter für das Flipbook werden?
Vielleicht kann man mit den GL_TEXTURE_ENV Funktionen was machen. Da gibt's ja unter anderem auch Skalarprodukt. Einzige Problem ist, dass die Werte dabei als gepackt im Bereich von -1...1 angesehen werden und aber eventuell kann man das mit anderen Funktionen umgehen.
Das kommt ganz darauf an was Aya damit vor hat. Du darfst nicht vergessen. Du musst dabei die komplette Textur neu erstellen. Das ist im Vergleich zu Shadern ein doch ziemlich großer Aufwand. Sowohl zeitlich als auch speichertechnisch. Und das 25 Mal in der Sekunde zu bewerkstellingen dürfte recht langsam werden. Denn ich denke nämlich mal das soll ein Filter für das Flipbook werden?
jep ist für eine funktion vom Flipbook.. dementsprechend ist textur-neuerstellen nicht so praktisch.. Ich denk ich bleib dann mal bei der Shader sache, klappt ja prima.. werd dann einfach alle möglichen abfragen einbauen ob TextureRects, NPot Texturen etc unterstüzt werden und dementsprechend dann den richtigen shader compilieren
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.