AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi OpenGL - Textur wird nicht angezeigt
Thema durchsuchen
Ansicht
Themen-Optionen

OpenGL - Textur wird nicht angezeigt

Ein Thema von overmoon · begonnen am 10. Aug 2003 · letzter Beitrag vom 14. Aug 2003
Antwort Antwort
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, 20: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
Benutzerbild von Mr_T
Mr_T

Registriert seit: 7. Jun 2002
Ort: Eilsum
136 Beiträge
 
Delphi 2005 Personal
 
#2

Re: OpenGL - Textur wird nicht angezeigt

  Alt 12. Aug 2003, 11:33
Stimmt, die glbmp nimmt einem wirklich ne Menge Arbeit ab... aber sie bietet auch 10x mehr Feats! Wenn sie geht, würde ich bei ihr bleiben...

Zu deinem Problem kann ich so nichts sagen, da die Codeschnipsel soweit ich sehe korrekt sind... kannste das ganze Programm (mit der BMP&Source) mal hier hochladen? Dann könnte ich mir das ganze Progie mal ansehen.....
Mein neuer, 13 Teiliger Open GL - Kurs (Samples in Delphi):
www.dcw-group.net
Neu! Ein großer Teil der Demos nach Kylix übersetzt!
Neu! Teil 2b: Initialisierung von OpenGL unter Kylix ist fertig!
  Mit Zitat antworten Zitat
Benutzerbild von overmoon
overmoon

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

Re: OpenGL - Textur wird nicht angezeigt

  Alt 13. Aug 2003, 23:59
Ich habe mein Projekt mal hochgeladen.
Vielleicht findest Du ja den Fehler. *hoff*

overmoon

ps: Ansonsten klappt es zur Zeit ganz gut.. Ich mache Würfeln, Kugeln, Kegel und packe mit glbmp Texturen darauf. Aber mich interessiert natürlich trotzdem, warum das Projekt mit der Methode "glTexImage2D" nicht will... Mich wurmt nicht zu wissen, was ich da falsch gemacht habe.
Angehängte Dateien
Dateityp: rar gltex.rar (123,1 KB, 21x aufgerufen)
"Habe Mut, dich deines eigenen Verstandes zu bedienen." (Immanuel Kant)
  Mit Zitat antworten Zitat
Benutzerbild von Aya
Aya

Registriert seit: 24. Jul 2003
Ort: Kassel
138 Beiträge
 
Delphi 6 Professional
 
#4

Re: OpenGL - Textur wird nicht angezeigt

  Alt 14. Aug 2003, 03:33
Hi,

ersetzt mal bei dir diese Zeile:
glTexImage2D(GL_TEXTURE_2D,0,3,NewTexture^.sizeX,NewTexture^.sizeY,0,GL_RGB,GL_UNSIGNED_BYTE,NewTexture^.data); mit dieser:
gluBuild2DMipmaps(GL_TEXTURE_2D,GL_RGB,NewTexture^.sizeX,NewTexture^.sizeY,GL_RGB,GL_UNSIGNED_BYTE,PByte(NewTexture^.data)); dann sollte es problemlos gehen.

Au'revoir,
Aya~
  Mit Zitat antworten Zitat
Benutzerbild von overmoon
overmoon

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

Re: OpenGL - Textur wird nicht angezeigt

  Alt 14. Aug 2003, 10:09
Stimmt. Mit "gluBuild2DMipmaps" geht es tatsächlich.

Dies schein ja wieder mal eine Prozedur zu sein, die man oben noch aus einer OpenGl-Dll einbinden muss...

function gluBuild2DMipmaps(Target: GLenum; Components, Width, Height: GLint; Format, atype: GLenum; Data: Pointer): GLint; stdcall; external glu32; ... aber, wenn ich das gemacht habe, dann geht das auch: Das Bild wird angezeigt. Und ich habe übrigens mal nachgesehen: glBMP benutzt auch diese Funktion.

Aber trotzdem interessiert es mich:
Warum funktioniert die Methode "glTexImage2D" nicht ??
"Habe Mut, dich deines eigenen Verstandes zu bedienen." (Immanuel Kant)
  Mit Zitat antworten Zitat
Benutzerbild von Mr_T
Mr_T

Registriert seit: 7. Jun 2002
Ort: Eilsum
136 Beiträge
 
Delphi 2005 Personal
 
#6

Re: OpenGL - Textur wird nicht angezeigt

  Alt 14. Aug 2003, 15:52
Das ist recht einfach zu erlären
Es liegt nicht daran, dass der Source Fehlerhaft ist, sondern, dass dein Bild das falsche Format hat (Es müssen für normale Texturen Werte 2^x sein ... 192 gehört da nicht zu...)
Sollteste deine Textur auf 256x256 oder 256x128 scalieren geht
gluBuild2DMipmaps hingegen scaliert die selber auf ein passendes Format.....


Ps: nette Textuer
Mein neuer, 13 Teiliger Open GL - Kurs (Samples in Delphi):
www.dcw-group.net
Neu! Ein großer Teil der Demos nach Kylix übersetzt!
Neu! Teil 2b: Initialisierung von OpenGL unter Kylix ist fertig!
  Mit Zitat antworten Zitat
Benutzerbild von overmoon
overmoon

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

Re: OpenGL - Textur wird nicht angezeigt

  Alt 14. Aug 2003, 22:08
Danke, tatsächlich: Wenn ich das Bild auf 256*256 skaliere, dann wird es auch angezeigt.

Wieder was gelernt.

Nochmals danke,
overmoon
"Habe Mut, dich deines eigenen Verstandes zu bedienen." (Immanuel Kant)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:28 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz