Autor Beitrag
Leuchtturm
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1087

Win Vista, Knoppix, Ubuntu
Delphi 7 Pe, Turbo Delphi, C#(VS 2005 Express), (X)HTML + CSS, bald Assembler
BeitragVerfasst: Do 03.08.06 16:36 
Hi,
in Lektion 4 der Tutorials bei DelphiGL wird so (ähnlich) eine Textur geladen:

ausblenden 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 :nixweiss:
Schonmal Danke
Leuchtturm
Einloggen, um Attachments anzusehen!
_________________
Ich bin dafür verantwortlich was ich sage - nicht dafür was du verstehst.
The Who
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 25

Win XP Prof
D3 Prof, D8, D7E
BeitragVerfasst: Do 03.08.06 16:44 
hast du auch vorher
ausblenden Delphi-Quelltext
1:
glEnable(GL_Texture_2D) //weiß nciht mehr was bei glEnable drinn stand					


gemacht


Zuletzt bearbeitet von The Who am Do 03.08.06 16:47, insgesamt 1-mal bearbeitet
jakobwenzel
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1889
Erhaltene Danke: 1

XP home, ubuntu
BDS 2006 Prof
BeitragVerfasst: Do 03.08.06 16:45 
Diese Zeile fehlt:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1087

Win Vista, Knoppix, Ubuntu
Delphi 7 Pe, Turbo Delphi, C#(VS 2005 Express), (X)HTML + CSS, bald Assembler
BeitragVerfasst: Do 03.08.06 16:48 
Ich habs jetzt so versucht:
ausblenden 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);// muss das woanders hin?
  glTranslatef(0, 0, -2);
  //glRotatef(12, 0, 1, 0);
  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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1087

Win Vista, Knoppix, Ubuntu
Delphi 7 Pe, Turbo Delphi, C#(VS 2005 Express), (X)HTML + CSS, bald Assembler
BeitragVerfasst: Do 03.08.06 16:51 
user profile iconjakobwenzel hat folgendes geschrieben:
Diese Zeile fehlt:
ausblenden 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.


Hab ich und es geht trotzdem nicht

_________________
Ich bin dafür verantwortlich was ich sage - nicht dafür was du verstehst.
jakobwenzel
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1889
Erhaltene Danke: 1

XP home, ubuntu
BDS 2006 Prof
BeitragVerfasst: Do 03.08.06 16:56 
ersetz mal diese Zeile:
ausblenden Delphi-Quelltext
 
152:
{ ... }
tex := img_load(pchar(extractfiledir(paramstr(0))+'./wiki.jpg'));

durch
ausblenden Delphi-Quelltext
 
152:
{ ... }
tex := img_load(pchar(IncludeTrailingPathDelimiter(extractfiledir(paramstr(0)))+'wiki.jpg'));

_________________
I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
Leuchtturm Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1087

Win Vista, Knoppix, Ubuntu
Delphi 7 Pe, Turbo Delphi, C#(VS 2005 Express), (X)HTML + CSS, bald Assembler
BeitragVerfasst: Do 03.08.06 17:05 
Erstmal danke für die Antworten geht aber immer noch nicht:
SetupGL sieht jetzt so aus:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure TForm1.SetupGL;
begin
  glClearColor(0, 0, 0, 1); //Hintergrundfarbe
  glEnable(GL_DEPTH_TEST);          //Tiefentest aktivieren
  glEnable(GL_CULL_FACE);           //Backface Culling aktivieren
  glEnable(GL_TEXTURE_2D);
end;

und InitTextures so:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1889
Erhaltene Danke: 1

XP home, ubuntu
BDS 2006 Prof
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1087

Win Vista, Knoppix, Ubuntu
Delphi 7 Pe, Turbo Delphi, C#(VS 2005 Express), (X)HTML + CSS, bald Assembler
BeitragVerfasst: 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



BeitragVerfasst: 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...
ausblenden 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
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1087

Win Vista, Knoppix, Ubuntu
Delphi 7 Pe, Turbo Delphi, C#(VS 2005 Express), (X)HTML + CSS, bald Assembler
BeitragVerfasst: Do 03.08.06 17:27 
Danke, Danke, Danke an euch alle(besonders an user profile iconmartin_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



BeitragVerfasst: Do 03.08.06 17:44 
keine Ursache :)
Lossy eX
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1048
Erhaltene Danke: 4



BeitragVerfasst: Fr 04.08.06 08:54 
user profile iconmartin_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...
ausblenden 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.
ausblenden 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);

  // Irgendwas ohne Textur zeichnen.

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.