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

Aktuelle Zeit: Fr Jul 18, 2025 23:22

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



Ein neues Thema erstellen Auf das Thema antworten  [ 12 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: RotKanal für RGB ohne Shader
BeitragVerfasst: Do Nov 30, 2006 19:22 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Hi,

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?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Nov 30, 2006 19:34 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Eines verstehe ich gerade nicht so richtig. Hast du eine Textur mit RGB oder eine Textur mit nur einem Rot Kanal?

Wobei das höchstwahrscheinlich alles entweder auf Shader oder auf Texturkopieren hinauslaufen könnte. Und Shader sind nicht mein Ding.

Evtl wäre auch mal interessant zu erfahren was du damit anstellen willst. Du kennst das. Vielleicht gibts ja noch ne ganz andere Möglichkeit.

PS: Wenn du glSlang verwendest sollten eigentlich auch Non Power Of Two unterstützt werden. Und wenn du MipMaps weglässt klappts auch bei ATI.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Nov 30, 2006 19:59 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Hi~

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*


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Nov 30, 2006 20:35 
Offline
DGL Member
Benutzeravatar

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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Dez 01, 2006 03:11 
Offline
DGL Member
Benutzeravatar

Registriert: So Jun 04, 2006 12:54
Beiträge: 263
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...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Dez 01, 2006 07:39 
Offline
DGL Member
Benutzeravatar

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

Viele Grüße
dj3hut1


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Dez 01, 2006 09:02 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
dj3hut1 hat geschrieben:
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

Wenn man das so setzt könnte man doch direkt GL_RED, GL_GREEN und GL_BLUE nehmen oder?

_________________
Steppity,steppity,step,step,step! :twisted:
❆ ❄ ❄ ❄ ❅ ❄ ❆ ❄ ❅ ❄ ❅ ❄ ❅ ❄ ❄
❄ ❄ ❄ ❅ ❄ ❄ ❄ ❅ ❄ ❄ ❆ ❄ ❄


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Dez 01, 2006 09:38 
Offline
DGL Member
Benutzeravatar

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)

Viele Grüße
dj3hut1


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Dez 01, 2006 12:29 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
Ups, stimmt, ich hatte die Doku dazu falsch verstanden.
Aber GL_LUMINANCE sollte dann wirklich die Lösung sein.

_________________
Steppity,steppity,step,step,step! :twisted:
❆ ❄ ❄ ❄ ❅ ❄ ❆ ❄ ❅ ❄ ❅ ❄ ❅ ❄ ❄
❄ ❄ ❄ ❅ ❄ ❄ ❄ ❅ ❄ ❄ ❆ ❄ ❄


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Dez 01, 2006 13:55 
Offline
DGL Member
Benutzeravatar

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?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Dez 01, 2006 17:08 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Dez 02, 2006 01:45 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Hi~

Lossy eX hat geschrieben:
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 :)

Aya~


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 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:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 16 Queries | GZIP : On ]