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

Aktuelle Zeit: Fr Jul 18, 2025 11:22

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



Ein neues Thema erstellen Auf das Thema antworten  [ 13 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: ColorBits und OpenGL
BeitragVerfasst: Do Jul 09, 2009 19:18 
Offline
DGL Member

Registriert: Mo Jun 12, 2006 14:47
Beiträge: 75
Programmiersprache: Object FPC
Hi Leutchen,

Ich sitze hier gerade über meiner baldigen Diplomarbeit, und hirne so rum.

Eigentlich brauche ich kein RGB, sondern nur Schwarz weis, und eigentlich sollte das dann auch gleich mehr als 8 Bit haben. Doch, Oh Schreck so was kann man bei OpenGL anscheinend nicht einstellen.

Nicht mal einfachere sachen wie z.b. nur 8 Bit für die Farben( also grau ) gehen .


Dieser Post vermittelt mir eher das Gefühl das OpenGL die Parameter diesbezüglich von CreateRenderingContext total egal sind.

Egal was ich da Eingebe, selbst der Wert 0 ich kriege immer eine RGBA Framebuffer, und die Texturen die ich mir anzeigen lasse sind voll sichtbar ...

Kan mir irgendjemand erklären warum ich diesen wert dann überhaupt einstellen kann ?

Oder mach ich was Grundlegend falsch

Code:
  1.  
  2.   RC := CreateRenderingContext(DC, [opDoubleBuffered], 32, 24, 0, 0, 0, 0);
  3. //  RC := CreateRenderingContext(DC, [opDoubleBuffered], 0, 24, 0, 0, 0, 0); // Keine Änderung zu oben
  4. //  RC := CreateRenderingContext(DC, [opDoubleBuffered], 8, 24, 0, 0, 0, 0); // Alles noch in Bunt
  5.  
  6.  

_________________
Try my 3D-Game (new Version 2) Balanced2 v2.02
or See my other Stuff at http://www.Corpsman.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: ColorBits und OpenGL
BeitragVerfasst: Do Jul 09, 2009 19:48 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Corpsman hat geschrieben:
Dieser Post vermittelt mir eher das Gefühl das OpenGL die Parameter diesbezüglich von CreateRenderingContext total egal sind.

Egal was ich da Eingebe, selbst der Wert 0 ich kriege immer eine RGBA Framebuffer, und die Texturen die ich mir anzeigen lasse sind voll sichtbar ...

Richtig. Das ist so etwas von egal. Der Treiber nimmt die Farbtiefe des Desktops. Und 8 Bit machen sowieso keinen Sinn, weil das dann nur mit einer Indizierten Farbtabelle sein kann. Und das wird nicht mehr beschleunigt. Was sicher nicht in deinem Interesse sein dürfte. Entsprechend wirst du das wohl in 32 Bit machen müssen und anschließend dann selber in Schwarz Weiß umwandeln müssen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jul 09, 2009 20:04 
Offline
DGL Member

Registriert: Mo Jun 12, 2006 14:47
Beiträge: 75
Programmiersprache: Object FPC
ja die überlegungen hatte ich auch schon,

das ich die oberen 8 bit auf g und die unteren auf r verteile, oder so,

aber bei entsprechenden Blending operationen werden ja farbwerte entsprechend beeinflust, und OpenGL blickt das ja dann nicht das es die Farbwerte entsprechend anders "betrachten" mus.

so nebenbei, würde es mit shadern gehen ?

ich kann zwar keine shader, aber ich mein ich hätte gehört, das man da deutlich mehr einflus auf alles hat.

_________________
Try my 3D-Game (new Version 2) Balanced2 v2.02
or See my other Stuff at http://www.Corpsman.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jul 09, 2009 21:22 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
Du kannst im Shader ganz einfach von RGB in Graustufen umrechnen. In meinem Shader verwende ich folgende Funktion:
Code:
  1. vec4 ToGrayScale(vec4 myColor)
  2. {
  3.   float br = 0.30 * myColor.r + 0.59 * myColor.g + 0.11 * myColor.b;
  4.   return vec4(br, br, br, 1.0);
  5. }
  6.  
Das muss man im Fragment-Shader dann nur noch au die Ergebnisfarbe anwenden.

mfg


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jul 10, 2009 07:57 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Ich sehe auch gerade, dass du nicht nur 8 Bit Farbtiefen haben willst sondern eigentlich schwarz/weiß mit mehr als 8 Bit. Damit wirst du mit dem Framebuffer wohl eher immer irgendwie Probleme bekommen. Gibt zwar eigentlich auch die Möglichkeit einen Framebuffer mit Floats zu machen aber na ja. Hat sich nicht so wahnsinnig durchgesetzt.

Alternativ würde ich dir da Frame Buffer Objects empfehlen. Dort kannst du einen Offscreen Renderbuffer erstellen bei dem du die Parameter deines Formates frei einstellen kannst. Also sollte es auch möglich sein, dass du nur einen Kanal benutzt und der dann Floats oder 16 Bit hat. Diese Daten werden dann auch direkt in eine Textur geschrieben was das eventuelle Verarbeiten/Abfragen auch noch deutlich vereinfachen sollte.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jul 10, 2009 10:29 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Mit Shadern und FramebufferObjects und einer halbwegs aktuellen Grafikkarte solltest du in der Lage sein wahlweise 16 oder 32bit Floats oder auch 8, 16 oder 32bit Integer pro Farbkanal in einen Framebuffer zu schreiben. Die entsprechenden Extensions heißen GL_ARB_texture_float und GL_EXT_texture_integer. Möglicherweise braucht man auch noch weitere. Mit Framebufferobjects ist es jedoch nicht möglich verschiedene Framebuffer-Formate zu mischen, also du musst dich für eines entscheiden.
Ein mischen der Formate ist nur mit Transformfeedback möglich, allerdings kann man dort diverse andere Dinge nicht machen bzw. das ist einfach ein ganz anderer Teil der Pipeline.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jul 10, 2009 11:17 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Also GL_EXT_texture_integer dürfte die Anforderungen aber gut in die Höhe treiben. Was ist da eigentlich mit der Konstante GL_RGBA16 aus OpenGL 1.1? Also wenn 16 Bit ausreichen, dann dürfte das ja auch genügen. Nur weiß ich nicht wie die Kompatibilität bzw Unterstützung zu aussieht.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jul 10, 2009 11:26 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
Also GL_EXT_texture_integer dürfte die Anforderungen aber gut in die Höhe treiben.

Wenn du 32bit Integer-Texturen willst, brauchst du auch 32bit Integer Arithmetik im Shader und die gibt erst seit Shader Model 4.0. Davor wurde je nach Karte sowieso mit Floats emuliert.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jul 10, 2009 13:07 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Coolcat hat geschrieben:
Wenn du 32bit Integer-Texturen willst, brauchst du auch 32bit Integer Arithmetik im Shader und die gibt erst seit Shader Model 4.0. Davor wurde je nach Karte sowieso mit Floats emuliert.

Natürlich. Das stelle ich ja auch gar nicht Frage. Aber ich habe so nicht gesehen, dass Corpsman unbedingt 32 Bit benötigt. Sondern er hat nur was von mehr als 8 Bit gesagt. Und wenn 16 da ausreichen, dann muss man ja nicht zwingend auf Shader Model 4 setzen müssen. Eventuell solltest du (Corpsman) da mal ein paar mehr Infos geben was du überhaupt damit vor hast.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jul 11, 2009 12:43 
Offline
DGL Member

Registriert: Mo Jun 12, 2006 14:47
Beiträge: 75
Programmiersprache: Object FPC
Hossa,

Es geht darum das ich versuche mittels OpenGL ein Kamerasystem zu simulieren.

Und da ist es so das die Daten durch alles mögliche abgeschwächt werden.

also mal ein Praktisches Beispiel

Lichtpunkt helligkeit 1000 -> Blende Abschwächung auf 800 -> Gedöns in der Optik Abschwächung auf 700 -> Quanteneffeckt des Chips Abschwächung auf 255.

Alle Abschwächungen entstehen dann durch blendings mit entsprechenden Alphatexturen, zumindest ist das der Plan.


Wenn ich nun eine Pixel mit nur 255 ganz Links stehen habe, dann kommt ganz rechts natürlich nicht mehr die maximale Alpmitude raus. Und deswegen der gedanke mehr als 8 Bit zu nehmen.

Ich hoffe das das meine Gedankengänge etwas verdeutlicht.

_________________
Try my 3D-Game (new Version 2) Balanced2 v2.02
or See my other Stuff at http://www.Corpsman.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jul 13, 2009 13:37 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
Du könntest Float Texturen nehmen und deine Werte auf den entsprechenden Bereich mappen. Das könntest du mit einem Framebufferobject und Shadern relativ leicht realisieren.
Soweit ich weiß sollten viele Karten inzwischen 16bit (vielleicht sogar 24bit) Fleißkommatexturen unterstützen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jul 13, 2009 16:13 
Offline
DGL Member

Registriert: Mo Jun 12, 2006 14:47
Beiträge: 75
Programmiersprache: Object FPC
Jo, thx, dieses Framebuffer Tutorial habe ich noch nicht ganz verstanden, aber da steig ich schon noch durch ;).

Um die Shader komme ich dann also auch nicht rum ?

Weil ich brauche ja eigentlich nur die funktionen

RenderAlphaQuad = Rendern einer Textur mit Alphakanal

Und die entsprechende Farbwahl, die dann Mehr als 8 Bit sein sollte.

Also Im Prinzip ein

glColor4ui( 1000,1000,1000) ?

_________________
Try my 3D-Game (new Version 2) Balanced2 v2.02
or See my other Stuff at http://www.Corpsman.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jul 14, 2009 18:30 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
Naja am Ende musst du das berechnete Bild wieder auf Farben reduzieren, die dein Monitor auch ordentlich darstellen kann. Wenn dein Plan ist, einfach mehrere Texturen übereinander zu blenden (falls das in diesem Fall überhaupt nötig ist) kannst du dafür auch einen Shader verwenden (die sind nicht so magisch wie sie klingen).

Wie sieht denn genau der Input, sprich deine Szene aus? Besitzt die Farbwerte, die über 8bit/Kanal hinausgehen? Und wie soll der Output aussehen? Möglicherweise reduziert das die Lösung auf einen einzigen klitzekleinen Shader.

mfg


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 9 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.009s | 15 Queries | GZIP : On ]