| Autor |
Beitrag |
Leuchtturm
      
Beiträge: 1087
Win Vista, Knoppix, Ubuntu
Delphi 7 Pe, Turbo Delphi, C#(VS 2005 Express), (X)HTML + CSS, bald Assembler
|
Verfasst: Do 03.08.06 16:36
Hi,
in Lektion 4 der Tutorials bei DelphiGL wird so (ähnlich) eine Textur geladen:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| procedure TForm1.InitTextures; var tex:psdl_surface; TexID :gluint; begin tex := img_load(pchar(extractfiledir(paramstr(0))+'/wiki.jpg')); if assigned(tex) then begin glgentextures(1,@TexID); glbindtexture(gl_texture_2d,TexID);
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,tex^.w,tex^.h,0,gl_rgb,gl_unsigned_byte,tex^.pixels);
sdl_freesurface(tex); end; end; |
Ich habe es auch schon ganz genau so wie in Lektion 4 gemacht. Bei mir bleibt das Viereck aber weiß. Ich habe mein Bild auch "wiki.jpg" genannt. Ich habe es auch schon mit anderen Dateinamen versucht. Das gesammte Projekt ist im Anhang.
Kann mir jemand sagen was hier falsch ist
Ich weiß nähmlich nicht mehr weiter
Schonmal Danke
Leuchtturm
Einloggen, um Attachments anzusehen!
_________________ Ich bin dafür verantwortlich was ich sage - nicht dafür was du verstehst.
|
|
The Who
      
Beiträge: 25
Win XP Prof
D3 Prof, D8, D7E
|
Verfasst: Do 03.08.06 16:44
hast du auch vorher
Delphi-Quelltext 1:
| glEnable(GL_Texture_2D) |
gemacht
Zuletzt bearbeitet von The Who am Do 03.08.06 16:47, insgesamt 1-mal bearbeitet
|
|
jakobwenzel
      
Beiträge: 1889
Erhaltene Danke: 1
XP home, ubuntu
BDS 2006 Prof
|
Verfasst: Do 03.08.06 16:45
Diese Zeile fehlt:
Delphi-Quelltext 1:
| glEnable(GL_TEXTURE_2D); |
Das schaltet Texturen erst an, und wenn das fehlt geht Texturen malen schlecht.
Das Schreibste am besten ans Ende von SetupGL.
_________________ I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
|
|
Leuchtturm 
      
Beiträge: 1087
Win Vista, Knoppix, Ubuntu
Delphi 7 Pe, Turbo Delphi, C#(VS 2005 Express), (X)HTML + CSS, bald Assembler
|
Verfasst: Do 03.08.06 16:48
Ich habs jetzt so versucht:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| procedure TForm1.Render; begin glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_PROJECTION); glLoadIdentity; gluPerspective(45.0, ClientWidth/ClientHeight, NearClipping, FarClipping);
glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glEnable(GL_TEXTURE_2D); glTranslatef(0, 0, -2); glBegin(GL_QUADS); glTexCoord2f(0,0); glVertex3f(-0.5,-0.5,0); glTexCoord2f(0,1); glVertex3f(0.5,-0.5,0); glTexCoord2f(1,1); glVertex3f(0.5,0.5,0); glTexCoord2f(1,0); glVertex3f(-0.5,0.5,0); glEnd;
SwapBuffers(DC); end; |
Ist aber trotzdem noch weiß
Leuchtturm
_________________ Ich bin dafür verantwortlich was ich sage - nicht dafür was du verstehst.
|
|
Leuchtturm 
      
Beiträge: 1087
Win Vista, Knoppix, Ubuntu
Delphi 7 Pe, Turbo Delphi, C#(VS 2005 Express), (X)HTML + CSS, bald Assembler
|
Verfasst: Do 03.08.06 16:51
_________________ Ich bin dafür verantwortlich was ich sage - nicht dafür was du verstehst.
|
|
jakobwenzel
      
Beiträge: 1889
Erhaltene Danke: 1
XP home, ubuntu
BDS 2006 Prof
|
Verfasst: Do 03.08.06 16:56
_________________ I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
|
|
Leuchtturm 
      
Beiträge: 1087
Win Vista, Knoppix, Ubuntu
Delphi 7 Pe, Turbo Delphi, C#(VS 2005 Express), (X)HTML + CSS, bald Assembler
|
Verfasst: Do 03.08.06 17:05
Erstmal danke für die Antworten geht aber immer noch nicht:
SetupGL sieht jetzt so aus:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| procedure TForm1.SetupGL; begin glClearColor(0, 0, 0, 1); glEnable(GL_DEPTH_TEST); glEnable(GL_CULL_FACE); glEnable(GL_TEXTURE_2D); end; |
und InitTextures so:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| procedure TForm1.InitTextures; var tex : PSDL_Surface; begin tex := img_load(pchar(IncludeTrailingPathDelimiter(extractfiledir(paramstr(0)))+'wiki.jpg')); if assigned(tex) then begin glGenTextures(1, @TexID); glBindTexture(GL_TEXTURE_2D, TexID);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, 3, tex^.w, tex^.h,0, GL_RGB, GL_UNSIGNED_BYTE, tex^.pixels);
SDL_FreeSurface(tex); end; end; |
geht aber immer noch nicht.
Leuchtturm
Einloggen, um Attachments anzusehen!
_________________ Ich bin dafür verantwortlich was ich sage - nicht dafür was du verstehst.
|
|
jakobwenzel
      
Beiträge: 1889
Erhaltene Danke: 1
XP home, ubuntu
BDS 2006 Prof
|
Verfasst: Do 03.08.06 17:08
Nimm mal als Textur eine die als Seitenlängen Potenzen von 2 Hat, also z.B. 256*256
_________________ I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
|
|
Leuchtturm 
      
Beiträge: 1087
Win Vista, Knoppix, Ubuntu
Delphi 7 Pe, Turbo Delphi, C#(VS 2005 Express), (X)HTML + CSS, bald Assembler
|
Verfasst: Do 03.08.06 17:18
Es funktioniert trotzdem noch nicht.
Bild ist im Anhang. Vielleicht will es ja jemand testen.
Leuchtturm
Einloggen, um Attachments anzusehen!
_________________ Ich bin dafür verantwortlich was ich sage - nicht dafür was du verstehst.
|
|
martin_yt
Hält's aus hier
Beiträge: 14
|
Verfasst: Do 03.08.06 17:21
Für texturen die nicht die das Format n^2 * n^2 besitzen(sowie deine), musst du eine andere Prozedur verwenden oder, wie gesagt, die textur abändern...
Delphi-Quelltext 1: 2: 3:
| gluBuild2DMipmaps(GL_TEXTURE_2D, 3 , tex^.w,tex^.h , GL_RGB ,GL_UNSIGNED_BYTE , tex^.pixels); |
außerdem fehlt in deinem beispielprogramm noch, dass du de textur bindest,
z.B. direkt vor dem Aufrufen der Zeichenroutine in deinem programm
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| glBindTexture(GL_TEXTURE_2D,TexID); glBegin(GL_QUADS); glTexCoord2f(0,0); glVertex3f(-0.5,-0.5,0); glTexCoord2f(0,1); glVertex3f(0.5,-0.5,0); glTexCoord2f(1,1); glVertex3f(0.5,0.5,0); glTexCoord2f(1,0); glVertex3f(-0.5,0.5,0); glEnd; |
außerdem wird deine Procedure InitTexttures nie aufgerufen...
am besten am ende von Form1.Create
gruss, martin_yt
|
|
Leuchtturm 
      
Beiträge: 1087
Win Vista, Knoppix, Ubuntu
Delphi 7 Pe, Turbo Delphi, C#(VS 2005 Express), (X)HTML + CSS, bald Assembler
|
Verfasst: Do 03.08.06 17:27
Danke, Danke, Danke an euch alle(besonders an martin_yt)
Leuchtturm
_________________ Ich bin dafür verantwortlich was ich sage - nicht dafür was du verstehst.
|
|
martin_yt
Hält's aus hier
Beiträge: 14
|
Verfasst: Do 03.08.06 17:44
keine Ursache 
|
|
Lossy eX
      
Beiträge: 1048
Erhaltene Danke: 4
|
Verfasst: Fr 04.08.06 08:54
martin_yt hat folgendes geschrieben: | Für texturen die nicht die das Format n^2 * n^2 besitzen(sowie deine), musst du eine andere Prozedur verwenden oder, wie gesagt, die textur abändern...
Delphi-Quelltext 1: 2: 3:
| gluBuild2DMipmaps(GL_TEXTURE_2D, 3 , tex^.w,tex^.h , GL_RGB ,GL_UNSIGNED_BYTE , tex^.pixels); | |
Nein. Bitte nicht gluBuild2DMipmaps verwenden. Es gibt nicht grausameres als diese Methode.
1. Ist sie so endlos langsam.
2. Durch die automatische Anpassung der Größe (falls sie nicht stimmt) wird die Textur so schwammig und mögliche Fehler werden unterdrückt. Was in keinem Falle vorteilhaft ist.
3. MipMaps kann man am Einfachsten von der Grafikkarte erzeugen lassen. Diese Funktionalität unterstützten ab einer TNT2 alle Karten.
4. Sollte man wirklich mal Texturen benutzen wollen die als Größe keine Potenz von 2 haben werden diese Gnadenlos umgewandelt.
5. Außerdem macht es zum Beispiel bei 2D überhaupt keinen Sinn MipMaps zu erstellen. Das ist pure Speicherverschwendung.
6. Wenn man die Möglichkeit hat sollte man Anisotropische Filterung zurückgreifen, da das Ergebniss dem der MipMaps haushoch überlegen ist.
Ich denke mal das sollte für den Anfang ausreichen warum man diese Methode bitte bitte nicht verwenden sollte.
Ich denke mal das Hauptproblem war das fehlende Binden der Textur. Im übrigen solltest du glEnable(GL_TEXTURE_2D) auch direkt vor dem Zeichnen noch einmal aktivieren und dann deaktivieren sobald die es nicht mehr benötigst. Solltest du anschließend etwas anderes Zeichnen wollen (Linien, Schrift etc.) würde darauf auch die Textur angebracht werden. Ideal wäre also.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| glBindTexture(GL_TEXTURE_2D, TexID); glEnable(GL_TEXTURE_2D); glBegin(GL_QUADS); glTexCoord2f(0, 0); glVertex3f(-0.5, -0.5, 0); glTexCoord2f(0, 1); glVertex3f( 0.5, -0.5, 0); glTexCoord2f(1, 1); glVertex3f( 0.5, 0.5, 0); glTexCoord2f(1, 0); glVertex3f(-0.5, 0.5, 0); glEnd; glDisable(GL_TEXTURE_2D);
|
Solltest du anschließend eine andere Textur benutzen wollen so brauchst du GL_TEXTURE_2D natürlich nicht erst deaktivieren um es anschließend wieder zu aktivieren.
_________________ Nur die Menschheit ist arrogant genug, um zu glauben sie sei die einzige intelligente Lebensform im All. Wo nicht mal das nachhaltig bewiesen wurde.
|
|
|