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

Aktuelle Zeit: Fr Jul 11, 2025 23:42

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



Ein neues Thema erstellen Auf das Thema antworten  [ 11 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: GL_TEXTURE_2D Problem
BeitragVerfasst: Mi Mai 10, 2006 20:48 
Offline
DGL Member
Benutzeravatar

Registriert: So Mai 07, 2006 20:20
Beiträge: 20
So ich meld mich ma wieder zu Wort :wink: . Ich mach grade dass Tutorial von Phobeus zum Thema Texturen. Ich habe (glaub ich) alles so gemacht wie Phobeus es beschrieben hatte. Trotzdem seh ich die Texture nicht auf dem Quad. Das Jpeg File Größe 256*256 liegt im selben Ordner wie die die Exe. Mach ich irgendwas falsch? Achso Header ist dglOpenGl mit SDL und SDL_Image wie man unten sieht. Anbei der Code:

Code:
  1.  
  2. unit Unit1;
  3.  
  4. interface
  5.  
  6. uses
  7.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  8.   Dialogs, dglOpenGL, SDL, SDL_Image;
  9.  
  10. type
  11.   TForm1 = class(TForm)
  12.     procedure FormCreate(Sender: TObject);
  13.     procedure IdleHandler(Sender: TObject; var Done: Boolean);
  14.     procedure FormResize(Sender: TObject);
  15.     procedure FormDestroy(Sender: TObject);
  16.     procedure FormKeyDown(Sender: TObject; var Key: Word;
  17.       Shift: TShiftState);
  18.   private { Private declarations }
  19.     StartTime, TimeCount, FrameCount  : Cardinal; //FrameCounter
  20.     Frames, DrawTime                  : Cardinal; //& Timebased Movement
  21.     procedure SetupGL;
  22.     procedure Init;
  23.     procedure Render;
  24.     function ErrorHandler: string;
  25.   public    { Public declarations }
  26.     DC                                : HDC;  //Handle auf Zeichenfläche
  27.     RC                                : HGLRC;//Rendering Context
  28.   end;
  29.  
  30. var
  31.   Form1: TForm1;
  32.   NearClipping: integer;
  33.   FarClipping: integer;
  34.   RotationY: double;
  35.   RotationX: double;
  36.  
  37. implementation
  38.  
  39. {$R *.dfm}
  40.  
  41. procedure TForm1.FormCreate(Sender: TObject);
  42. var tex  :   PSDL_Surface;
  43.     TexID:   TgluInt;
  44. begin
  45.   DC:= GetDC(Handle);
  46.   if not InitOpenGL then Application.Terminate;
  47.   RC:= CreateRenderingContext( DC,
  48.                                [opDoubleBuffered],
  49.                                32,
  50.                                24,
  51.                                0,0,0,
  52.                                0);
  53.   ActivateRenderingContext(DC, RC);
  54.   SetupGL;
  55.   Init;
  56.   Application.OnIdle := IdleHandler;
  57.   //-----Textur Laden-----\\
  58.   tex := IMG_Load(PChar(ExtractFileDir(paramStr(0))+'/test.jpg'));
  59.   if assigned(tex) then
  60.     begin
  61.     glGenTextures(1, @TexID);
  62.     glBindTexture(GL_TEXTURE_2D, TexID);
  63.  
  64.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  65.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  66.  
  67.     glTexImage2D(GL_TEXTURE_2D, 0, 3, tex^.w, tex^.h,0, GL_RGB, GL_UNSIGNED_BYTE, tex^.pixels);
  68.  
  69.     SDL_FreeSurface(tex);
  70.     end;
  71. end;
  72.  
  73. procedure TForm1.Init;
  74. begin
  75.   NearClipping := 1;
  76.   FarClipping  := 1000;
  77.   RotationY    := 0.0;
  78.   RotationX    := 0.0;
  79. end;
  80.  
  81. procedure TForm1.SetupGL;
  82. begin
  83.   glClearColor(0.0, 0.0, 0.3, 0.0); //Hintergrundfarbe
  84.   glEnable(GL_DEPTH_TEST);          //Tiefentest aktivieren
  85.   glEnable(GL_CULL_FACE);           //Backface Culling aktivieren
  86. end;
  87.  
  88. procedure TForm1.FormResize(Sender: TObject);
  89. var tmpBool : Boolean;
  90. begin
  91.   glViewport(0, 0, ClientWidth, ClientHeight);
  92.   glMatrixMode(GL_PROJECTION);
  93.   glLoadIdentity;
  94.   gluPerspective(45.0, ClientWidth/ClientHeight, NearClipping, FarClipping);
  95.  
  96.   glMatrixMode(GL_MODELVIEW);
  97.   glLoadIdentity;
  98.   IdleHandler(Sender, tmpBool);
  99. end;
  100.  
  101. procedure TForm1.FormDestroy(Sender: TObject);
  102. begin
  103.   DeactivateRenderingContext;
  104.   DestroyRenderingContext(RC);
  105.   ReleaseDC(Handle, DC);
  106. end;
  107.  
  108. procedure TForm1.Render;
  109. begin
  110.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  111.  
  112.   glMatrixMode(GL_PROJECTION);
  113.   glLoadIdentity;
  114.   gluPerspective(60, ClientWidth/ClientHeight, NearClipping, FarClipping);
  115.  
  116.   glTranslatef(0, 0, -5);
  117.  
  118.   glMatrixMode(GL_MODELVIEW);
  119.   glLoadIdentity;
  120.  
  121.   glPushMatrix;
  122.     glRotatef(RotationY, 0, 1, 0);
  123.     glRotatef(RotationX, 1, 0, 0);
  124.   glBegin(GL_QUADS);
  125.     glEnable(GL_TEXTURE_2D);
  126.     glTexCoord2f(0,0); glVertex3f(-1, -1, 0);
  127.     glTexCoord2f(0,1); glVertex3f(1, -1, 0);
  128.     glTexCoord2f(1,1); glVertex3f(1, 1, 0);
  129.     glTexCoord2f(1,0); glVertex3f(-1, 1, 0);
  130.     glDisable(GL_TEXTURE_2D);
  131.   glEnd;
  132.   glPopMatrix;
  133.  
  134.   {glPushMatrix;
  135. //    glRotatef(RotationY, 0, 1, 0);
  136. //    glRotatef(RotationX, 1, 0, 0);
  137.   glBegin(GL_TRIANGLES);
  138.     glColor3f(1,1,0); glVertex3f(-1, 0, 0);
  139.     glColor3f(0,0,1); glVertex3f(1, 0, 0);
  140.     glColor3f(0,1,0); glVertex3f(0, 1, 0);
  141.   glEnd;
  142.   glPopMatrix;}
  143.  
  144.   SwapBuffers(DC);
  145. end;
  146.  
  147. function TForm1.ErrorHandler;
  148. begin
  149.   result := gluErrorString(glGetError);
  150. end;
  151.  
  152. procedure TForm1.IdleHandler(Sender: TObject; var Done: Boolean);
  153. begin
  154.   StartTime:= GetTickCount;
  155.   Render;
  156.   DrawTime:= GetTickCount - StartTime;
  157.   Inc(TimeCount, DrawTime);
  158.   Inc(FrameCount);
  159.  
  160.   if TimeCount >= 1000 then begin
  161.     Frames:= FrameCount;
  162.     TimeCount:= TimeCount - 1000;
  163.     FrameCount:= 0;
  164.     Caption:= InttoStr(Frames) + 'FPS '+ErrorHandler;
  165.     ErrorHandler;
  166.   end;
  167.  
  168.   Done:= false;
  169. end;
  170.  
  171. procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  172.   Shift: TShiftState);
  173. begin
  174.  
  175.   if Key = VK_NumPad4 then
  176.     RotationY := RotationY + 2.0;
  177.   if Key = VK_NumPad6 then
  178.     RotationY := RotationY - 2.0;
  179.   if Key = VK_NumPad8 then
  180.     RotationX := RotationX + 2.0;
  181.   if Key = VK_NumPad2 then
  182.     RotationX := RotationX - 2.0;
  183.   if Key = VK_NumPad5 then begin
  184.     RotationY := 0.0;
  185.     RotationX := 0.0;
  186.     end;
  187.  
  188. end;
  189.  
  190.  
  191. end.
  192.  


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mai 10, 2006 20:53 
Offline
DGL Member

Registriert: So Feb 19, 2006 23:46
Beiträge: 55
Du ruft glEnable/Disable(GL_TEXTURE_2D) innerhalb eines glBegin/glEnd-Blockes auf. Soweit ich weiß dürfen da aber auch nur Immediate-Funktionen hin. Also einfach das glEnable ausserhalb des Blocks machen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mai 10, 2006 21:23 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Das seh ich auch so. Für einen Überblick was in glBegin-End Blöcken reindarf, einfach mal den Artikel glBegin lesen.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: oki
BeitragVerfasst: Do Mai 11, 2006 14:51 
Offline
DGL Member
Benutzeravatar

Registriert: So Mai 07, 2006 20:20
Beiträge: 20
Ja das wars. Jetz gehts. Ich hab mir nämlich so einen Würfel gemacht wo ich das Gesicht von mir als Textur genommen habe. Den Würfel kann man mit dem Numpad in alles richtungen drehen. Jetz freu ich mich wie nen kleines Kind. Delphi fand ich ja schon immer toll, aber wenn man so einfach nen dreidimensionalen Würfel mit Textur darstellen kann haut mich das vom Hocker :D


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jun 28, 2006 18:38 
Offline
DGL Member

Registriert: So Jan 22, 2006 19:30
Beiträge: 9
Hi Ihr
Habe genau den gleichen Quelltext kopiert. Die glEnamble funktion habe ich natürlich wie vorgschlagen aus den gl begin- end bereich herausgenommen. die gldisable(GL_texture_"D) habe ich vorher ganz gelöscht. Als Texture benutze ich ein ganz normales jpg bild. Aber ich sehe statt der textur nur eine weiße fläche, also gehe ich davon aus, dass mein Bild probleme bereitet. Kann das sein??
Wenn ja könnte mir einer bitte sagen was ich machen muss?? Oder vllt erstmal ne textur hochladen die auf jeden fall fktniert??

mfg trouff


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jun 28, 2006 19:42 
Offline
Fels i.d. Brandung
Benutzeravatar

Registriert: Sa Mai 04, 2002 19:48
Beiträge: 3830
Wohnort: Tespe (nahe Hamburg)
Du hast glEnable(GL_TEXTURE_2D); nicht komplett entfernt, sondern z.B. am Anfang der Render-Methode? Dann kann es natürlich durchaus passieren, dass die Textur nicht richtig geladen wurde. Existiert diese wirklich? Erzeuge einmal eine 256x256 Textur in einem beliebigen Malprogramm und speichere diese als jpg dort wo die Exe ist und passe ggf. entsprechende Dateinamen an.

_________________
"Light travels faster than sound. This is why some people appear bright, before you can hear them speak..."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jun 29, 2006 13:26 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
glDisable und glEnable gehören irgendwo zusammen. Was man einschaltet sollte man auch irgendwann wieder ausschalten, denn OGL merkt sich diese Zustände über einen Schleifendurchlauf hinaus.

Eine Weiße Textur kann man auch bekommen, wenn die größe der Textur nicht eine Potenz von 2 ist. (z.B. 128x256 ist OK, 123x456 nicht.)

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jun 29, 2006 14:30 
Offline
DGL Member

Registriert: So Jan 22, 2006 19:30
Beiträge: 9
HI
Also ich habe verschiedenes probiert. Zuerst habe ich das Bild als 256* 256 pixel abgespeichert. Da tu sich nichts. glenable(gl_texture_2d) hab ich auch ganz auskopmmentiert obwohl das ja quatsch ist. Da das ja aktiviert sein muss. Die disable funktion hab ich auch wieder reingenommen. Die hab ich hinter das glend der Quad prozedur geschrieben. Das Bild befindet sich natürlich im gleichen ordner wie die exe datei und der name von Bild und dem Namen den ich lade sind auch gleich.
Hat noch wer ne idee was ich machen kann??

mfg trouff


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jun 29, 2006 14:33 
Offline
Fels i.d. Brandung
Benutzeravatar

Registriert: Sa Mai 04, 2002 19:48
Beiträge: 3830
Wohnort: Tespe (nahe Hamburg)
Bitte prüfe mal explizit, ob dieser Zweig:
Code:
  1. if assigned(tex) then

Auch wirklich ausgeführt wird.

_________________
"Light travels faster than sound. This is why some people appear bright, before you can hear them speak..."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jun 29, 2006 14:53 
Offline
DGL Member

Registriert: So Jan 22, 2006 19:30
Beiträge: 9
Ja wird er

Aber sry alle zusammen. Anscheinend hatte ich aufeinmal ne weiße textur. Da sieht man natürlich nicht so viel :).
Danke für die Hilfe und sry nochmal.

mfg trouff


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jun 30, 2006 11:16 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
hehe... da können wir natürlich lange rätseln... ;)

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 11 Beiträge ] 
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


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.011s | 14 Queries | GZIP : On ]