ich hoffe Ihr könnt mir helfen. Mein Programm soll ein Fenster aufmachen, dass ein spezielles 8bpp Bitmap zeigt. Aber leider liegt genau bei dem 8bpp das Problem. Bis jetzt hab ich es zwar geschafft das
Bild anzuzeigen, aber es ist sehr körnig und die Pixel haben auch nicht die richtigen Helligkeitswerte. Also folgend mein code:
#include<GL/glut.h>
#include<GL/gl.h>
#include<GL/glu.h>
#include<stdio.h>
#include<stdlib.h>
#include"bitmap8bpp.h" // das ist das Header zur einer Klasse, die 8bpp Bitmaps einliest
#include<iostream.h>
glClearColor(0.0f, 0.0f, 0.0f, 0.0f); // set backround color to black
glClearDepth(1.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45.0f, Width/Height, 0.1f, 100.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glutDisplayFunc(&DrawScene);
glutMainLoop();
return 0;
}
An meinem Bitmap loader kanns nicht liegen, da der gleiche Effekt auch bei anderen Bitmap loadern auftritt. Ich hoff ihr könnt mir da weiter helfen.
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Ah ja...jetzt seh ichs... dein glTexImage2D aufruf nutzt GL_LUMINANCE. Probier mal GL_RGB bzw. GL_RGBA.
Mehr Infos was die Parameter bewirken gibts hier:
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Ne Flash bei 8Bits Per Pixel ist das vollkommen okay. Habe das neulich auch in der glBitmap nachgebaut (noch nicht öffentlich). Aber das geht so.
Ein 8Bit Bild besitzt eine Farbpalette. Die Werte der Pixel werden auf die entsprechenden Werte in der palette gemapped und so dargestellt. Wenn du das Bild nach OpenGL lädst, dann benutzt er nur die Werte der Pixel und lässt die Palette außen vor. Sprich ein rotes Pixel wird in 8Bit in OpenGL niemals rot sein. Sondern es wird immer der Index für die Palette (Wert des Pixels) benutzt. 0 ist Schwarz und 255 ist Weiß.
Evtl. ist das ja dein Problem. Wenn das der Fall ist, dann solltest du bei bunten Bildern auf 24 Bit umsteigen. Wenn das nicht der Fall ist, dann wäre es das Beste wenn du ein Bild machst auf dem man dein Problem richtig erkennen kann, dann können wir dir auch sagen was dein Problem ist.
vielen Dank für Eure Antworten.
Ich hab hier mal ein paar Bilder gemacht, damit Ihr mein Problem besser verstehen könnt.
Es ist 1Bilderpaar, das Original und dann dass dazugehörige von meinem OpenGL Progamm
erzeugte Bild.
cu agamemnon
Edit: Sry, Attachments haben nicht richtig funktioniert.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Zuletzt geändert von agamemnon am Di Sep 27, 2005 14:07, insgesamt 2-mal geändert.
Registriert: Sa Jan 01, 2005 17:11 Beiträge: 2068
Programmiersprache: C++
Ich gehe davon aus, dass du SDL_Image zum Laden benutzt.
Die 8Bit Surface, die du erhälst, hat unter pixels keine Helligkeitswerte sondern Indexe gespeichert.
Mit Hilfe dieses Index kann man die Farbe des Pixels aus der Farbpalette auslesen.
Beispiel und Details hier
Edit: LossyEx hat es vorher ja schonmal beschrieben. Das ist einfach dein Problem.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Evtl. genügt es auch schon, wenn du ein anderes Grafikprogramm benutzt. Wenn du zum Beispiel Gimp verwendest, das Bild dann in Graustufen umwandelst und es speicherst, dann ordnet er die Farben von Hause aus schon richtig an. Also so, dass man sie Problemlos laden kann. Wenn ich mich gerade nicht ganz vertue.
Aber da kann man sich dann auch nicht ganz drauf verlassen. Denn wenn man plötzlich eine, von einem anderen Programm gespeicherte Textur verwendet fliegt das Programm auf die Nase
_________________ "Für kein Tier wird so viel gearbeitet wie für die Katz'."
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Das mag sein. Aber wie willst du sonst 8Bpp verwenden? Und extra nur deswegen 24 Bpp zu verwenden finde ich ein wenig übertrieben. Aber so ein Verhalten ist nur bei Windows Bitmaps der Fall. Ein PNG kann man auch direkt als Graustufen abspeichern. Ich meine DDS und TGA haben so ähnliche Möglichkeiten auch eingebaut. So genau weiß ich das aus dem Kopf nicht müsste ich nachschauen.
Mitglieder in diesem Forum: 0 Mitglieder und 7 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.