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

Aktuelle Zeit: So Jul 20, 2025 00:16

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



Ein neues Thema erstellen Auf das Thema antworten  [ 13 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Fr Sep 23, 2005 15:10 
Offline
DGL Member

Registriert: Fr Sep 23, 2005 14:53
Beiträge: 3
Hallo,

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>

static GLuint name;

void DrawScene()
{

glEnable(GL_TEXTURE_2D);
glTranslatef(0.0f, 0.0f, -3.0f);
glBindTexture(GL_TEXTURE_2D, name);
glBegin(GL_QUADS);
glTexCoord2f(0.0f, 0.0f); glVertex2f(-1.0f, -1.0f);
glTexCoord2f(1.0f, 0.0f); glVertex2f( 1.0f, -1.0f);
glTexCoord2f(1.0f, 1.0f); glVertex2f( 1.0f, 1.0f);
glTexCoord2f(0.0f, 1.0f); glVertex2f(-1.0f, 1.0f);
glutSwapBuffers();
glEnd();
glDisable(GL_TEXTURE_2D);
}


int main(int argc, char **argv)
{
CBitmap8bpp Bild;
bool temp = Bild.Load("Bild.bmp");
int Height = Bild.Height(); // Height = Höhe des Bitmaps
int Width = Bild.Width(); // Width = Breite des Bitmaps
unsigned char *data = Bild.Pixelarray(); // in dem Array data stehen nun die Helligkeitswerte jedes Pixels
cout << "\n Height" << Height << "\t Width" << Width << "\n";

glutInit(&argc, argv);
glutInitDisplayMode(GLUT_LUMINANCE | GLUT_DOUBLE | GLUT_ALPHA );
glClear(GL_COLOR_BUFFER_BIT| GL_DEPTH_BUFFER_BIT);
glutInitWindowSize(600,600);
glutInitWindowPosition(0,0);
glutCreateWindow("Optical Flow");


glGenTextures(1,&name);
glBindTexture(GL_TEXTURE_2D, name);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
// glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
// glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexImage2D(GL_TEXTURE_2D, 0, 3, Width, Height, 0, GL_LUMINANCE, GL_BYTE, data);


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.

Vielen, vielen Dank schon mal :)

Bis bald,
agamemnon


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Sep 23, 2005 15:25 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Hmmm versuch mal glColor3f(1,1,1) direkt vor dem Zeichnen des Quads zu setzen. Licht is aus oder?

Ach und nutz bitte die codeformatierung. So siehts einfach net schön aus.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Sep 24, 2005 00:41 
Offline
DGL Member

Registriert: Fr Sep 23, 2005 14:53
Beiträge: 3
Hab den Befehl eingefügt, aber es ändert sich leider nichts. :(

cu agamemnon


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Sep 24, 2005 00:55 
Offline
Guitar Hero
Benutzeravatar

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:

http://wiki.delphigl.com/index.php/GlTexImage

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Sep 24, 2005 07:08 
Offline
DGL Member
Benutzeravatar

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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Sep 24, 2005 10:59 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Texturen mit Farbpalette werden von den neueren Karten nicht mehr unterstützt.
http://oss.sgi.com/projects/ogl-sample/ ... exture.txt


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Sep 27, 2005 13:44 
Offline
DGL Member

Registriert: Fr Sep 23, 2005 14:53
Beiträge: 3
Hallo Leute,

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.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Sep 27, 2005 13:52 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Hmmm....Meine Augen sind zwar nicht mehr die Besten, aber sehen müsst ich die Bidler eigentlich...wenn sie denn da wären... ;)
Edit: Erledigt... ;)

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Zuletzt geändert von Flash am Di Sep 27, 2005 16:33, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Sep 27, 2005 14:42 
Offline
Ernährungsberater
Benutzeravatar

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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Sep 27, 2005 15:39 
Offline
DGL Member
Benutzeravatar

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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Sep 28, 2005 21:16 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
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'."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Sep 28, 2005 21:26 
Offline
DGL Member
Benutzeravatar

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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 29, 2005 03:02 
Offline
DGL Member

Registriert: So Sep 26, 2004 05:57
Beiträge: 190
Wohnort: Linz
Veruschs mal mit GL_UNSIGNED_BYTE statt GL_BYTE beim glTexImage.


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 5 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 ]