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

Aktuelle Zeit: Fr Jul 04, 2025 08:50

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



Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Do Sep 03, 2009 09:06 
Offline
DGL Member

Registriert: Fr Jan 16, 2009 13:36
Beiträge: 75
Hallo alle zusammen,

Ich habe folgendes Problem. Ich möchte eine Pixelgraphic als Textur verwenden, bzw mehrere Texturen in einem TGLUint Array speichern.
Ich habe hier im Forum schon viel von der Verwendung von TBitmap als Textur gelesen und deshalb dieses hier verfasst als eine Art Abwandlung.



Code:
  1.  
  2.  setlength(FMyTexture,length(textures));
  3.    for i:=0 to length(textures)-1 do
  4.    begin
  5.       LoadTextureFromPG(Textures[i],FMyTexture[i]);
  6.    end;
  7.  


Die Load Texture Routine sieht so aus:

Code:
  1.  
  2.  
  3. procedure TOpenGLFigures.LoadTextureFromPG(const aPG : TPixelgraphic; var Texture: Cardinal);
  4. var
  5.     x,y,w,h  : integer;
  6.     data : PByte;
  7.     PB : PByte;
  8. begin
  9.    //bmp.PixelFormat := pf24bit;
  10.    w := aPG.Width;
  11.    h := aPG.Height;
  12.  
  13.    getmem(data,W*H*3);
  14.  
  15.    PB := data;
  16.    
  17.    for y:=0 to H-1 do
  18.    begin
  19.       for x := 0 to W-1 do
  20.       begin
  21.          PB^:= GetRValue(aPG.Pixels[x,y]); inc(PB);
  22.          PB^:= GetGValue(aPG.Pixels[x,y]); inc(PB);
  23.          PB^:= GetBValue(aPG.Pixels[x,y]); inc(PB);
  24.       end;
  25.    end;
  26.     glBindTexture(GL_Texture_2d,texture);
  27.     glTexImage2d(GL_TEXTURE_2D,0,gl_RGBA8,W,H,0,GL_BGRA,GL_UNSIGNED_BYTE,data);
  28.  
  29.    {gltexparameteri(GL_TEXTURE_2D,GL_Texture_min_filter,GL_LINEAR_MIPMAP_LINEAR);
  30.    gltexparameteri(GL_TEXTURE_2D,GL_Texture_mag_filter,GL_LINEAR);
  31.    gluBuild2DMipmaps(GL_TEXTURE_2D,gl_RGBA,w,h,GL_BGRA,gl_unsigned_byte,data); }
  32.    FreeMem(data);
  33.  
  34. end;
  35.  


wenn ich dies nun auf einer Kugel darstellen möchte sehe ich Nichts!!!
In der Texture scheint auch nicht wirklich etwas enthalten zu sein, da der Parameter der Variablen immer 0 ist.

Mein Aufruf der Kugeln (weil mehrere Viewports) sieht wie folgt aus:

Code:
  1.  
  2. for i := 0 to FNumberViews-1 do
  3.      begin
  4.    
  5.         glViewport(vport[i,1], vport[i,2], FWidth div FCols, FHeight div FRows);
  6.      //  glLightfv(GL_Light0,GL_Position,@light_position);
  7.        glLightModelfv(GL_Light_Model_Ambient,@model_ambient);
  8.        glEnable(GL_Lighting);
  9.        glEnable(GL_Light0);      
  10.  
  11.        gObj := gluNewQuadric;
  12.        gluQuadricDrawStyle(gObj ,GLU_FILL);
  13.        gluQuadricTexture(gObj,true);
  14.        glBindTexture(GL_Texture_2d,FMyTexture[i]);
  15.        glEnable(GL_TEXTURE_2D);
  16.        gluSphere(gObj,1,64,64);
  17.  
  18. end;
  19.  


Ich bin für jede erdenkliche Hilfe sehr dankbar.

Gruss

heavenssake007


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 03, 2009 09:17 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
du hast den aufruf von glGenTextures vergessen :)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 03, 2009 10:12 
Offline
DGL Member

Registriert: Fr Jan 16, 2009 13:36
Beiträge: 75
Ich hab das mal so gemacht:

Code:
  1.  
  2. glGenTextures( 1, @texture );
  3.     glBindTexture(GL_Texture_2d,texture);
  4.     glTexImage2d(GL_TEXTURE_2D,0,gl_RGBA,W,H,0,GL_BGRA,GL_UNSIGNED_BYTE,data);
  5.  


sehe jedoch immer noch nichts. Wenn ich die Graphik per glBitmap Loader aus einer Datei lade, funktioniert es, jedoch ist es ja nicht das was ich haben möchte. :(


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 03, 2009 12:04 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Du musst auch die TexturFilter setzen. Per Default müssten die vielleicht sogar auf MipMaps stehen. Und wenn du die Texturen ohne MipMaps uploadest und dann benutzt, dann werden sie nicht darstellt. gluBuild2DMipMaps ist da das Letzte zu was ich raten würde.

Nach dem erzeugen (Gen) deiner Texturen. Also irgendwann zwischen Gen und dem Benutzen. Nach Gen empfielt sich aber.
Code:
  1. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  2. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 03, 2009 13:46 
Offline
DGL Member

Registriert: Fr Jan 16, 2009 13:36
Beiträge: 75
Vielen Dank für Euer beider Hilfe,

Ich hab das jetzt doch über den BitmapLoader von Dir (Lossey) gelöst:

Die Laderoutine sieht dann wie folgt aus:

Code:
  1.  
  2.     procedure TOpenGLFigures.LoadTextureFromPG(const aPG : TPixelgraphic; var Texture: Cardinal;Counter:integer);
  3.     var glBitmap: TglBitmap2D;
  4.           abmp : TBitmap;
  5.     begin
  6.         Texture := 0;
  7.         abmp := TBitmap.Create;
  8.    
  9.         glBitmap := TGLBitmap2d.Create;
  10.         aPG.SaveToBitmap(abmp);
  11.         glBitmap.AssignFromBitmap(abmp);
  12.  
  13.         try
  14.        glBitmap.DeleteTextureOnFree := False;
  15.        glBitmap.FreeDataAfterGenTexture := False;
  16.        glBitmap.GenTexture(True);
  17.        if (glBitmap.ID > 0) then begin
  18.          Texture := glBitmap.ID;
  19.        end;
  20.      finally
  21.       glBitmap.Free;
  22.     end;
  23. end;
  24.  


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 » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 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 ]