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

Aktuelle Zeit: Mo Jul 14, 2025 23:28

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



Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Texturen laden in Glut?? Wie??
BeitragVerfasst: Mo Nov 24, 2003 21:35 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Nov 24, 2003 21:28
Beiträge: 28
Wohnort: Kiel
Hallo!

Ich hab mal ne Frage: Wie lade ich in OpenGL Texturen? Und zwar am Besten ohne die "glaux"-Bibliothek. Ich programmiere im Rahmen einer Vorlesung an der Uni. Dort sollen wir unter Unix/Linux mit C/C++ programmieren und zwar das Glut-Toolkit, aber nicht die glaux Verfügung. Geht das Laden nicht irgendwie anders?

Ich programmiere zwar nicht in Delphi sonder in C/C++, aber die Syntax für OpenGL müsste ja ziemlich gleich sein (Ich hab begonnen OpenGL in Delphi zu proggen, bin dann aber aufgrund der Vorlesung auf C/C++ umgestiegen)

Ich danke euch jetzt schonmal für eure Antworten.
mfG, McFly


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Nov 24, 2003 22:06 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 13, 2002 12:18
Beiträge: 1063
GLUT stellt keine Funktionen zur Verfügung, um Texturen zu laden - vielmehr kannst du mittels GLUT automatisch MipMaps erstellen.
Die Bilddaten kannst du aber ganz normal über eine Datei laden und interpretieren (uncompressed TGA ist z.B. sehr simpel) und dann direkt mittel glTexImage2D oder aber gluBuild2DMipmaps an OpenGL senden.

_________________
Viel Spaß beim Programmieren,
Mars
http://www.basegraph.com/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Nov 24, 2003 22:47 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Nov 24, 2003 21:28
Beiträge: 28
Wohnort: Kiel
gibt´s dafür irgend ein schönes Tutorial dass das gut erklärt? Ich werd mal auf dieser Seite suchen, wäre aber nett wenn mir jemand da n Tip geben könnte falls ich nix finde.

mfG, McFly


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Nov 24, 2003 23:23 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 13, 2002 12:18
Beiträge: 1063
Nachdem hier, glaube ich, nirgends erklärt wird, wie man ein Bild direkt lädt (dies ließe sich aber leicht selbst herausfinden - insbesondere wenn man Informatikvorlesungen besucht) hier die Kurzfassung eines simplen Texturladers in C++ (Achtung: der lädt dafür nur unkomprimierte 32Bit TGA Dateien):

Der Code stammt aus meiner BaseGraph Bibliothek und läuft bewiesenermaßen auch unter Linux :wink: . Für die Delpher kann der Code ja als Beispiel dienen, wie schön wir es eigentlich haben :D .


Code:
  1. typedef struct tbgRGBA {
  2.     unsigned char r,g,b,a;
  3. } TRGBA, PRGBA;
  4. typedef TRGBA TRGBATable[9999];
  5. typedef TRGBATable *PRGBATable;
  6.  
  7.  
  8. typedef struct tbgRGBAIMAGE {
  9.     int width, height;
  10.     PRGBATable data;
  11. } TRGBAImage, *PRGBAImage;
  12.  
  13.  
  14.  
  15. typedef struct tbgTGAHEADER {
  16.     unsigned char idlength;
  17.     unsigned char colourmaptype;
  18.     unsigned char datatypecode;
  19.     unsigned short colourmaporigin;
  20.     unsigned short colourmaplength;
  21.     unsigned char colourmapdepth;
  22.     unsigned short x_origin;
  23.     unsigned short y_origin;
  24.     unsigned short width;
  25.     unsigned short height;
  26.     unsigned char bitsperpixel;
  27.     unsigned char imagedescriptor;
  28. } TTGAHeader;
  29.  
  30.  
  31.  
  32. PRGBAImage LoadTGAImage(char *FileName)
  33. {
  34.     TTGAHeader Header;
  35.     FILE* F;
  36.     PRGBAImage img;
  37.     int l;
  38.     char h;
  39.  
  40.     img = NULL;
  41.     F = fopen(FileName, "rb");
  42.     if (F!=NULL)
  43.     {
  44.         fread(&Header.idlength, 1, 1, F);
  45.         fread(&Header.colourmaptype, 1, 1, F);
  46.         fread(&Header.datatypecode, 1, 1, F);
  47.         fread(&Header.colourmaporigin, 2, 1, F);
  48.         fread(&Header.colourmaplength, 2, 1, F);
  49.         fread(&Header.colourmapdepth, 1, 1, F);
  50.         fread(&Header.x_origin, 2, 1, F);
  51.         fread(&Header.y_origin, 2, 1, F);
  52.         fread(&Header.width, 2, 1, F);
  53.         fread(&Header.height, 2, 1, F);
  54.         fread(&Header.bitsperpixel, 1, 1, F);
  55.         fread(&Header.imagedescriptor, 1, 1, F);
  56.  
  57.         if ((Header.datatypecode==2) && (Header.bitsperpixel==32))
  58.         {
  59.             fseek(F, 18 + Header.idlength + Header.colourmaptype * Header.colourmaplength, SEEK_SET);
  60.             img = (PRGBAImage) malloc(sizeof(TRGBAImage));
  61.             img->width = Header.width;
  62.             img->height = Header.height;
  63.             l = img->width * img->height;
  64.             img->data = (PRGBATable) malloc(l * 4);
  65.             fread(img->data, 4, l, F);
  66.             do
  67.             {
  68.                 l--;
  69.                 h = (*img->data)[l].r;
  70.                 (*img->data)[l].r = (*img->data)[l].b;
  71.                 (*img->data)[l].b = h;
  72.             } while (l>=0);
  73.         }
  74.         fclose(F);
  75.     }
  76.     else
  77.     {
  78.         img = (PRGBAImage) malloc(sizeof(TRGBAImage));
  79.         img->width = 16;
  80.         img->height = 16;
  81.         img->data = (PRGBATable) malloc(1024);
  82.         memset(img->data, 0xFF, 1024);
  83.     }
  84.     return img;
  85. }
  86.  
  87. ...
  88. t2dImage ist vom Typ PRGBAImage, dem Rückgabewert von LoadTGAImage
  89. ...
  90.  
  91. void CTexture2D::Compile()
  92. {
  93.     glBindTexture(texTarget, texHandle); // texture binding info
  94.     // either use mipmaps or set texture image directly
  95.     if (t2dImage!=NULL)
  96.     {
  97. #if !defined(NO_GLU)
  98.         if ((bgUseMipMaps) && (gluBuild2DMipmaps!=NULL))
  99.             gluBuild2DMipmaps(texTarget,        // target
  100.                               texComponents,    // components
  101.                               t2dImage->width, t2dImage->height,
  102.                               GL_RGBA, GL_UNSIGNED_BYTE, t2dImage->data);
  103.     else
  104. #endif
  105.             glTexImage2D(texTarget,             // target
  106.                          0,                     // mipmap level
  107.                          texComponents,         // components
  108.                          t2dImage->width, t2dImage->height,
  109.                          0,                  // border
  110.                          GL_RGBA, GL_UNSIGNED_BYTE, t2dImage->data);
  111.     }
  112.     glTexParameteri(texTarget, GL_TEXTURE_MIN_FILTER, texMinFilter); // filter for pixels > texels
  113.     glTexParameteri(texTarget, GL_TEXTURE_MAG_FILTER, texMagFilter); // filter for pixels < texels
  114.     glTexParameteri(texTarget, GL_TEXTURE_WRAP_S, t2dWrapS); // wrap texture s parameter
  115.     glTexParameteri(texTarget, GL_TEXTURE_WRAP_T, t2dWrapT); // wrap texture t parameter
  116.     glTexParameterfv(texTarget, GL_TEXTURE_BORDER_COLOR, (GLfloat*) &t2dBorderColor); // texture border color
  117. }            
  118.  

_________________
Viel Spaß beim Programmieren,
Mars
http://www.basegraph.com/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Nov 25, 2003 00:10 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Nov 24, 2003 21:28
Beiträge: 28
Wohnort: Kiel
thx


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


Wer ist online?

Mitglieder in diesem Forum: Bing [Bot] und 4 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:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.010s | 18 Queries | GZIP : On ]