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

Aktuelle Zeit: Fr Jul 18, 2025 12:34

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



Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: In BMP File Rendern (C++,Linux)
BeitragVerfasst: Sa Okt 04, 2008 12:17 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 02, 2003 12:47
Beiträge: 300
Wohnort: Marburg
Moin Moin.
ich möchte gerne ein Programm in C++ unter Linux schreiben, welches mit OpenGL in ein BMP File rendert. Eine Bildschirmausgabe wird nicht benötigt.
Die BMP Header und das Auslesen der Pixel habe ich mir aus Tutorials aus dem Wiki, sowie aus einer BMP Klasse in C++ zusammengesucht.
Wenn ich mir nach dem glGetIntegerv(GL_VIEWPORT, Viewport); befehl mit cout<<Viewport[0]<< usw die ausgelesenen Daten anzeige, erhalte ich nur [0,0,0,0] statt [0,0,800,600].
Daher wollte ich fragen, ob ich bei der initalisierung von OpenGL etwas vergessen habe?

Code:
  1. #include <iostream>
  2. #include <fstream>
  3. #include <GL/gl.h>
  4. #include <GL/glu.h>
  5.  
  6. using namespace std;
  7.  
  8. typedef struct {
  9.     unsigned short int Signature;
  10.     unsigned int Size;
  11.     unsigned int Reserved;
  12.     unsigned int BitsOffset;
  13. } BITMAP_FILEHEADER;
  14.  
  15. typedef struct {
  16.     unsigned int HeaderSize;
  17.     int Width;
  18.     int Height;
  19.     unsigned short int Planes;
  20.     unsigned short int BitCount;
  21.     unsigned int Compression;
  22.     unsigned int SizeImage;
  23.     int PelsPerMeterX;
  24.     int PelsPerMeterY;
  25.     unsigned int ClrUsed;
  26.     unsigned int ClrImportant;
  27.     unsigned int RedMask;
  28.     unsigned int GreenMask;
  29.     unsigned int BlueMask;
  30.     unsigned int AlphaMask;
  31.     unsigned int CsType;
  32.     unsigned int Endpoints[9];
  33.     unsigned int GammaRed;
  34.     unsigned int GammaGreen;
  35.     unsigned int GammaBlue;
  36. } BITMAP_HEADER;
  37.  
  38. typedef struct {
  39.     unsigned char Blue;
  40.     unsigned char Green;
  41.     unsigned char Red;
  42.     unsigned char Alpha;
  43. } BGRA;
  44.  
  45. char    Filename[]="000Frame.bmp";
  46. GLint Viewport[4];
  47. BITMAP_FILEHEADER FileHeader;
  48. BITMAP_HEADER Header;
  49. BGRA *BitmapData;
  50.  
  51. int main() {
  52.  
  53.     glViewport(0,0,(GLsizei)(800),(GLsizei)(600));
  54.     glMatrixMode(GL_PROJECTION);
  55.     glLoadIdentity();
  56.     gluPerspective(45.0f,(GLfloat)(800)/(GLfloat)(600),0.1f,100.0f);
  57.     glMatrixMode(GL_MODELVIEW);
  58.     glLoadIdentity();
  59.  
  60.     glClearColor(0.0f,0.0f,0.0f,0.5f);
  61.     glClearDepth(1.0f);
  62.     glDepthFunc(GL_LEQUAL);
  63.     glEnable(GL_DEPTH_TEST);
  64.     glShadeModel(GL_SMOOTH);
  65.     glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
  66.  
  67.     glGetIntegerv(GL_VIEWPORT, Viewport);
  68.     FileHeader.Signature=19778;
  69.     FileHeader.BitsOffset=sizeof(BITMAP_HEADER)+sizeof(BITMAP_FILEHEADER);
  70.     Header.HeaderSize=sizeof(BITMAP_HEADER);
  71.     Header.Width=Viewport[2];
  72.     Header.Height=Viewport[3];
  73.     Header.Planes=1;
  74.     Header.BitCount=32;
  75.     Header.SizeImage=Header.Width*Header.Height*Header.BitCount/8;
  76.     FileHeader.Size=FileHeader.BitsOffset+Header.SizeImage;
  77.  
  78.     //
  79.     //  Bild Rendern
  80.     //
  81.  
  82.     glFlush();
  83.  
  84.     glReadPixels(0,0,Viewport[2],Viewport[3],GL_BGRA,GL_UNSIGNED_BYTE,BitmapData);
  85.     FILE *file=fopen(Filename, "wb");
  86.     fwrite(&FileHeader, sizeof(BITMAP_FILEHEADER), 1, file);
  87.     fwrite(&Header, sizeof(BITMAP_HEADER), 1, file);
  88.     fwrite(BitmapData, Header.SizeImage, 1, file);
  89.     fclose(file);
  90.  
  91.     return 0;
  92. }


Ich hoffe, das mir trotz meinem Wechsel von Delphi nach C++ jemand helfen kann.
Danke im Vorraus, Georg.

Edit by i0n0s: Cpp-Tags

_________________
Nothing, oh sweet nothing,
today we are doing nothing at all...
http://www.geo-progs.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Okt 04, 2008 13:52 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 06, 2005 18:34
Beiträge: 362
Wohnort: Hamburg
Hi ...

soweit ich weiss, braucht man um überhaupt irgend einen OpenGL Befehl anständig ausführen zu können (z.B. glViewport) einen GL Context.
D.h. du musst OpenGL so oder so initialisieren. Unter Windows ist es aber wohl möglich, als Context auch ein DIB (device independant bitmap) anzugeben, das nur im Speicher liegt. Kenne mich aber damit nich aus.
Google einfach mal nach dem Stichwort 'PFD_DRAW_TO_BITMAP' (ist ein Flag für den Pixelformatdescriptor) und du wirst evtl fündig.

Gruß
Shai

_________________
Der Mensch hat neben dem Trieb der Fortpflanzung und dem zu essen und zu trinken zwei Leidenschaften: Krach zu machen und nicht zuzuhören. (Kurt Tucholsky)
Schwabbeldiwapp, hier kommt die Grütze. (Der Quästor)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: In BMP File Rendern (C++,Linux)
BeitragVerfasst: Sa Okt 04, 2008 14:14 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
geo hat geschrieben:
Daher wollte ich fragen, ob ich bei der initalisierung von OpenGL etwas vergessen habe?

Ja, du hast die ganze initialisierung vergessen :mrgreen:

Aya~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Okt 04, 2008 14:30 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 02, 2003 12:47
Beiträge: 300
Wohnort: Marburg
jo das stimmt wohl.

habe jtzt mit SDL openGL initalisiert:
SDL_SetVideoMode(SCREEN_W, SCREEN_H, SCREEN_BPP, Vflags);
leider wird dabei auch ein fenster erstellt, aber so funktionierts schon mal.
kennt jemand eventuell den SDL befehl um openGL ohne Fenster zu initialisieren?
sonnst werde ich erstmal selbst weiterprobieren.
vielen dank schonmal.

_________________
Nothing, oh sweet nothing,
today we are doing nothing at all...
http://www.geo-progs.de


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 4 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.008s | 16 Queries | GZIP : On ]