Einzelnen Beitrag anzeigen

Benutzerbild von overmoon
overmoon

Registriert seit: 8. Aug 2003
Ort: Passau
51 Beiträge
 
Delphi 6 Personal
 
#1

OpenGL - Textur wird nicht angezeigt

  Alt 10. Aug 2003, 19:43
Ich arbeite mich gerade durch das Tutorial von Mr_T und bin jetzt beim 5.Teil. Bisher hat auch alles wunderbar geklappt, aber jetzt weigert sich Delphi meine Textur anzuzeigen. *grummel*

Ich habe eine Variable "tex" vom Typ gluInt global in der Unit deklariert.

So sieht der Beginn des Konstruktors der Form aus:

Delphi-Quellcode:
procedure TFormMain.FormCreate(Sender: TObject);
begin
     myDC := GetDC(Handle);
     SetupPixelFormat;
     myRC := wglCreateContext(myDC);
     wglMakeCurrent(myDC,myRC);
     glEnable(GL_DEPTH_TEST);
     glEnable(GL_TEXTURE_2D);
     InitTextures;
     glLoadIdentity;
     ...
In der Prozedur "InitTextures" lade ich die Textur. Diese Prozedur sieht bei mir folgendermaßen aus:

Delphi-Quellcode:
procedure TFormMain.InitTextures;
var NewTexture: PTAUX_RGBImageRec;
begin
     NewTexture := auxDIBImageLoadA('bild.bmp');

     if not Assigned(NewTexture) then ShowMessage('Fehler!');

     glGenTextures(1, tex);
     glBindTexture(GL_TEXTURE_2D, tex);

     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);

     glTexImage2D(GL_TEXTURE_2D,0,3,NewTexture^.sizeX,NewTexture^.sizeY,0,GL_RGB,GL_UNSIGNED_BYTE,NewTexture^.data);
end;
Und schließlich das Benutzen der Textur mache ich folgendermaßen:

Delphi-Quellcode:
procedure TFormMain.Render;
begin
     glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
     glLoadIdentity;

     glColor3f(0,0,1);

     glBindTexture(GL_TEXTURE_2D,tex);
     glBegin(GL_QUADS);
       glTexCoord2f(0,0);
       glVertex3f(-0.5,-0.5,-3);
       glTexCoord2f(0,1);
       glVertex3f(-0.5, 0.5,-3);
       glTexCoord2f(1,1);
       glVertex3f( 0.5, 0.5,-3);
       glTexCoord2f(1,0);
       glVertex3f( 0.5,-0.5,-3);
     glEnd;

     SwapBuffers(myDC);
end;
Und was sehe ich... Leider nur ein blaues Quadrat anstatt meines Bildes.

Nun stellt sich mir natürlich die Frage: Was habe ich falsch gemacht ? Ich habe versucht den Fehler zu finden, aber ... naja, hat nicht geklappt.

Ich vermute, dass das Problem entweder bei der Methode "auxDIBImageLoadA" oder bei der Methode "glTexImage2D" liegt.

Wenn ich nämlich die Unit glBMP, die die Klasse TglBMP enthält, für das Handling von Texturen benutze, dann wird meine Textur "bild.bmp" problemlos geladen und auch auf dem Quadrat angezeigt. Abre ich möchte gerne die andere Variante benutzen. Ich finde nämlich die Unit glBMP (von Jason Allen) nimmt mir zuviel arbeit ab.

overmoon
  Mit Zitat antworten Zitat