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

Aktuelle Zeit: Fr Jul 18, 2025 16:38

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



Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: auslesen einer opengl textur
BeitragVerfasst: Di Aug 15, 2006 11:08 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 19, 2002 12:14
Beiträge: 9
hallo leute, ist es irgendwie moeglich eine textur die mittels glTexImage2D in opengl hochgeladen wurde
auch wieder herunterzuladen ? also quasi wieder in einen speicherbereich zu kopieren?

_________________
divide and rule, recure and imperate...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Aug 15, 2006 11:42 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 17, 2002 12:07
Beiträge: 976
Wohnort: Tübingen
Also die Hau-drauf-Methode wär ja, einfach die Textur auf ein möglichst großes Quad zu zeichnen und dann einen Screenshot bzw. die Pixelfarben auszulesen.

_________________
"Du musst ein Schwein sein in dieser Welt, sangen die Prinzen, das ist so 1.0. Du musst auf YouTube zeigen, dass dir dein Schweinsein gefällt, das ist leuchtendes, echtes Web 2.0."
- Hal Faber

Meine Homepage: http://laboda.delphigl.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Aug 15, 2006 12:15 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
La Boda. Das ist wirklich "Hau drauf". Speziell dafür gibt es Methoden. In der glBitmap habe ich dafür auch eine Methode implementiert. GetDataFromTexture

Diese lauten glGetTexImage und glGetCompressedTexImage. Außerdem solltest du mit glGetTexLevelParameter die Parameter der Textur auslesen. Diese können sich zum Hochgeladenen unterscheiden. Bei 8 Bit aber eher unwahrscheinlich. Vorstellbar wäre aber etwas mit dem Alphakanal.


Zur kompletten Verwirrung hier aber noch das Stück aus der glBitmap. Ich übernehme aber keine Garantie darauf, dass das auch so funktioniert wie es sein sollte.

Code:
  1. procedure TglBitmap2D.GetDataFromTexture;
  2. var
  3.   Temp: pByte;
  4.   TempWidth, TempHeight, RedSize, GreenSize, BlueSize, AlphaSize, LumSize: Integer;
  5.   TempType, TempIntFormat: Cardinal;
  6.   IntFormat: TglBitmapInternalFormat;
  7. begin
  8.   Bind;
  9.  
  10.   // Request Data
  11.   glGetTexLevelParameteriv(Target, 0, GL_TEXTURE_WIDTH, @TempWidth);
  12.   glGetTexLevelParameteriv(Target, 0, GL_TEXTURE_HEIGHT, @TempHeight);
  13.   glGetTexLevelParameteriv(Target, 0, GL_TEXTURE_INTERNAL_FORMAT, @TempIntFormat);
  14.  
  15.   glGetTexLevelParameteriv(Target, 0, GL_TEXTURE_RED_SIZE, @RedSize);
  16.   glGetTexLevelParameteriv(Target, 0, GL_TEXTURE_GREEN_SIZE, @GreenSize);
  17.   glGetTexLevelParameteriv(Target, 0, GL_TEXTURE_BLUE_SIZE, @BlueSize);
  18.   glGetTexLevelParameteriv(Target, 0, GL_TEXTURE_ALPHA_SIZE, @AlphaSize);
  19.   glGetTexLevelParameteriv(Target, 0, GL_TEXTURE_LUMINANCE_SIZE, @LumSize);
  20.  
  21.   // Get glBitmapInternalFormat from TempIntFormat
  22.   TempType := GL_UNSIGNED_BYTE;
  23.   case TempIntFormat of
  24.     GL_ALPHA:
  25.       IntFormat := ifAlpha;
  26.     GL_LUMINANCE:
  27.       IntFormat := ifLuminance;
  28.     GL_LUMINANCE_ALPHA:
  29.       IntFormat := ifLuminanceAlpha;
  30.     GL_RGB4:
  31.       begin
  32.         IntFormat := ifR5G6B5;
  33.         TempIntFormat := GL_RGB;
  34.         TempType := GL_UNSIGNED_SHORT_5_6_5;
  35.       end;
  36.     GL_RGB, GL_RGB8:
  37.       IntFormat := ifRGB8;
  38.     GL_RGBA, GL_RGBA4, GL_RGBA8:
  39.       begin
  40.         if (RedSize = 4) and (BlueSize = 4) and (GreenSize = 4) and (AlphaSize = 4) then begin
  41.           IntFormat := ifRGBA4;
  42.           TempIntFormat := GL_BGRA;
  43.           TempType := GL_UNSIGNED_SHORT_4_4_4_4_REV;
  44.         end else
  45.         if (RedSize = 5) and (BlueSize = 5) and (GreenSize = 5) and (AlphaSize = 1) then begin
  46.           IntFormat := ifRGB5A1;
  47.           TempIntFormat := GL_BGRA;
  48.           TempType := GL_UNSIGNED_SHORT_1_5_5_5_REV;
  49.         end else begin
  50.           IntFormat := ifRGBA8;
  51.         end;
  52.       end;
  53.     GL_BGR:
  54.       IntFormat := ifBGR8;
  55.     GL_BGRA:
  56.       IntFormat := ifBGRA8;
  57.     GL_COMPRESSED_RGB_S3TC_DXT1_EXT:
  58.       IntFormat := ifDXT1;
  59.     GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:
  60.       IntFormat := ifDXT1;
  61.     GL_COMPRESSED_RGBA_S3TC_DXT3_EXT:
  62.       IntFormat := ifDXT3;
  63.     GL_COMPRESSED_RGBA_S3TC_DXT5_EXT:
  64.       IntFormat := ifDXT5;
  65.   else
  66.     IntFormat := ifEmpty;
  67.   end;
  68.  
  69.   // Getting data from OpenGL
  70.   GetMem(Temp, FormatGetImageSize(glBitmapPosition(TempWidth, TempHeight), IntFormat));
  71.   try
  72.     if FormatIsCompressed(IntFormat) and (GL_VERSION_1_3 or GL_ARB_texture_compression) then
  73.       glGetCompressedTexImage(Target, 0, Temp)
  74.     else
  75.       glGetTexImage(Target, 0, TempIntFormat, TempType, Temp);
  76.  
  77.     SetDataPtr(Temp, IntFormat, TempWidth, TempHeight);
  78.   except
  79.     FreeMem(Temp);    
  80.   end;  
  81. end;


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Aug 15, 2006 13:12 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 19, 2002 12:14
Beiträge: 9
super, danke 8)

_________________
divide and rule, recure and imperate...


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 9 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 | 14 Queries | GZIP : On ]