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

Aktuelle Zeit: So Apr 28, 2024 19:31

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 1 Beitrag ] 
Autor Nachricht
BeitragVerfasst: Sa Okt 03, 2009 23:39 
Offline
DGL Member

Registriert: Di Sep 29, 2009 14:04
Beiträge: 1
Ziel ist es, eine Art Bitmask zu erstellen. Hierzu rendere ich in einem Renderpass das fragliche Objekt auf eine Texture, die ich nun erstmal zum Testen als Bitmap abspeichere. Das klappt aber nur so halb. :roll:
Ich fürchte, ich mache irgendwas beim festlegen der Speicherbereich falsch... Damit hab ich kaum Erfahrung.

Hier das Problem in Bildern:

Bei 128*128 ist die Welt in Ordnung:
Bild
Bei 256*256 wird das Problem sichtbar:
Bild
Bei 512*512 wirds heftiger:
Bild
Und für 1024*1024 kann ich mir das Bild sparen, da bleibts schwarz...

Code:
  1.  
  2. type
  3.   PixArray = Array[1..3] of byte;
  4. var
  5.   tmpTex: glUInt;
  6.   pTexData: Pointer;
  7.   mywidth, myheight: integer;
  8.  
  9.   ImgP: Pointer;
  10.   tmpgluByte: PByte;
  11.   tmpBitmap: TBitmap;
  12.   p: ^PixArray;
  13.   ty,tx: integer;
  14.  
  15. begin
  16.   mywidth := round(self.Width);
  17.   myHeight := round(self.Height);
  18.  
  19.   //Create a fitting Texture
  20.   GetMem(PTexData,myWidth*myHeight*4);
  21.  
  22.   glGenTextures(1,@tmpTex);
  23.   glBindTexture(GL_TEXTURE_2D, tmpTex);
  24.   glTexImage2D(GL_TEXTURE_2D, 0, 4, myWidth,myHeight,0, GL_RGBA, GL_UNSIGNED_BYTE, PTexData);
  25.   Dispose(PTexData);
  26.  
  27.   //Render the Object
  28.   glClearColor(0.0, 0.0, 0.0, 0.0);
  29.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  30.  
  31.   glMatrixMode(GL_PROJECTION);
  32.   glLoadIdentity;
  33.   glViewport(0,0,myWidth,myHeight);
  34.   glOrtho(0,myWidth,0,myHeight,0,128);
  35.  
  36.   glMatrixMode(GL_MODELVIEW);
  37.   glLoadIdentity;
  38.  
  39.   glTranslatef(0, 0, -5);
  40.  
  41.   if Texture = NIL then
  42.     glBindTexture(GL_TEXTURE_2D,0)
  43.   else
  44.     Texture.Bind();  //Texturobjekt von glBitmap
  45.  
  46.  
  47. //Diese Werte sind eigentlich für die Animationen zuständig, erstmal gefixt fürs testen...
  48.     FTexLeft := 1;
  49.     FTexBottom := 1;
  50.     FTexTop := 0;
  51.     FTexRight := 0;
  52.  
  53.     glBegin(GL_QUADS);
  54.         glTexCoord2f(FTexLeft,FTexBottom); glVertex3f(0, 0, 0);  //left bottom
  55.  
  56.         glTexCoord2f(FTexRight,FTexBottom); glVertex3f(myWidth, 0, 0);  //right bottom
  57.  
  58.  
  59.         glTexCoord2f(FTexRight,FTexTop); glVertex3f(myWidth, myHeight, 0);  //right top
  60.  
  61.  
  62.         glTexCoord2f(FTexLeft,FTexTop); glVertex3f(0, myHeight, 0);  //left top
  63.     glEnd;
  64.  
  65.   // copy to the texture
  66.  
  67.   glBindTexture(GL_TEXTURE_2D, tmpTex);
  68.   glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 0, 0, myWidth, myHeight, 0);
  69.  
  70.   GetMem(ImgP,myWidth*myHeight*4);
  71.  
  72.   glGetTexImage(GL_TEXTURE_2D, 0, GL_RGBA, GL_UNSIGNED_BYTE, imgP);
  73.   tmpgluByte := imgP;
  74.  
  75.   tmpBitmap := TBitmap.Create;
  76.   tmpBitmap.PixelFormat := pf24Bit;
  77.   tmpBitmap.Height := myHeight;
  78.   tmpBitmap.Width := myWidth;
  79.  
  80.  
  81. //Oder mache ich nur beim ausgeben des Bildes einen Fehler ?!
  82.   for ty := 0 to tmpBitmap.Height - 1 do
  83.   begin
  84.     p := tmpBitmap.ScanLine[ty];
  85.     for tx := 0 to tmpBitmap.Width - 1 do
  86.     begin
  87.       p^[3] := tmpgluByte^;
  88.       inc(tmpglUByte);
  89.       p^[2] := tmpgluByte^;
  90.       inc(tmpglUByte);
  91.       p^[1] := tmpgluByte^;
  92.       inc(tmpGluByte,2);  //Skip the AlphaChannel
  93.       inc(p);
  94.     end;
  95.   end;
  96.  
  97.   tmpBitmap.SaveToFile('C:\Testbmp23232.bmp');
  98.   tmpBitmap.Free;
  99.  
  100.   Dispose(ImgP);
  101. end;
  102.  


EDIT: Das Problem tritt ab 182*182 auf...

2ndEdit: Ich hab nach wie vor keine Ahnung was hier schieflief, aber mit einem FrambufferObject klappt das jetzt :)


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


Wer ist online?

Mitglieder in diesem Forum: Bing [Bot] und 15 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.013s | 18 Queries | GZIP : On ]