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 ?
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast
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.