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

Aktuelle Zeit: Di Jul 15, 2025 21:04

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



Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Sa Feb 18, 2006 18:07 
Offline
DGL Member

Registriert: Sa Feb 18, 2006 17:51
Beiträge: 3
Hallo Leute,

erstmal Danke dass ihr euch die Mühe gemacht habt die tollen Tutorials zu schreiben.
Allerdings ist es etwas mühsam ohne Beispiel-Quellcode klarzukommen. So ist es mir leider nicht gelungen anhand des 4. Tuts eine Textur auf ein Quad zu zeichnen (es wird nur lediglich ein weißes Quad angezeigt) und ich finde den Fehler einfach nicht. Wäre nett, wenn ihr mal den Code überfliegen könntet und einem verzweifelten Noob seinen Fehler aufzeigt. Danke!

Achja: Die Textur is 256x256, am Format kann es also nicht liegen.

Code:
  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  7.   Dialogs, dglOpenGL, SDL, SDL_Image;
  8.  
  9. type
  10.   TForm1 = class(TForm)
  11.     procedure FormCreate(Sender: TObject);
  12.     procedure FormDestroy(Sender: TObject);
  13.     procedure Render;
  14.     procedure OnIdle(Sender: TObject; var Done: Boolean);
  15.   private
  16.     { Private declarations }
  17.  
  18.   public
  19.     { Public declarations }
  20.   end;
  21.  
  22. var
  23.   Form1: TForm1;
  24.   DC, RC :HDC;
  25.   rotation : integer;
  26.  
  27. implementation
  28.  
  29. {$R *.dfm}
  30.  
  31. procedure TexturLaden();
  32. var
  33.   handle : gluint;
  34.   tex : PSDL_Surface;
  35. begin
  36.   tex := IMG_Load('./brick01.jpg');
  37.   if assigned(tex) then
  38.   begin
  39.     glGenTextures(1, addr(handle));
  40.     glBindTexture(GL_TEXTURE_2D, handle);
  41.  
  42.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  43.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  44.  
  45.     glTexImage2D(GL_TEXTURE_2D, 0, 3, tex^.w, tex^.h,0, GL_RGB, GL_UNSIGNED_BYTE, tex^.pixels);
  46.  
  47.     SDL_FreeSurface(tex);
  48.   end
  49.   else
  50.     MessageBox(0,'Texturenpfad oder Dateiname falsch!',
  51.                         'Fehler beim Laden der Textur!',MB_OK or MB_ICONERROR);
  52. end;
  53.  
  54. procedure TForm1.FormCreate(Sender: TObject);
  55. begin
  56.   InitOpenGL;
  57.  
  58.   TexturLaden();
  59.  
  60.   DC:=GetDC(Handle);
  61.   //GoToFullscreen(1024, 768, 32, 75);
  62.   RC:=CreateRenderingContext(DC, [opDoubleBuffered], 32, 24, 0, 0, 0, 0);
  63.   ActivateRenderingContext(DC, RC);
  64.   glClearColor(0.0, 0.0, 0.0, 0.0);
  65.   Application.OnIdle:=Onidle;
  66.  
  67.   rotation:=0;
  68. end;
  69.  
  70. procedure TForm1.FormDestroy(Sender: TObject);
  71. begin
  72.   DeactivateRenderingContext;
  73.   DestroyRenderingContext(RC);
  74.   ReleaseDC(Handle,DC);
  75.   ChangeDisplaySettings(devmode(nil^), 0);
  76. end;
  77.  
  78. procedure TForm1.Render;
  79. begin
  80.   glMatrixMode(GL_PROJECTION);
  81.   glLoadIdentity;
  82.   glViewport(0, 0, ClientWidth, ClientHeight);
  83.   gluPerspective(60, ClientWidth/ClientHeight,1, 128);
  84.   glMatrixMode(GL_Modelview);
  85.   glLoadIdentity;
  86.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  87.   glTranslatef(0, 0,-6);
  88.   glrotatef(rotation,0,1,0);
  89.  
  90.   //Zeichnen
  91.   glEnable(GL_TEXTURE_2D);
  92.   glBindTexture(GL_TEXTURE_2D, handle);
  93.   glBegin(GL_QUADS);
  94.     glTexCoord2f(0,0); glVertex3f(-1,-1,0);
  95.     glTexCoord2f(0,1); glVertex3f(-1,1,0);
  96.     glTexCoord2f(1,1); glVertex3f(1,1,0);
  97.     glTexCoord2f(1,0); glVertex3f(1,-1,0);
  98.   glEnd;
  99.  
  100.   SwapBuffers(DC);
  101.   rotation:=rotation+1;
  102. end;
  103.  
  104. procedure TForm1.Onidle(Sender: TObject; var Done: Boolean);
  105. begin
  106.   Render;
  107.   Done:= false;
  108. end;
  109. end.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Feb 18, 2006 18:55 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Sieht eigentlich alles ganz gut aus. Was du mal versuchen solltest ist, das Texturladen am ende der FormCreate auszuführen, da dein Rednercontext zu dem Zeitpunkt noch nicht aktiv ist, und Texturen an selbigem hängen.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Feb 18, 2006 19:01 
Offline
DGL Member

Registriert: Sa Feb 18, 2006 17:51
Beiträge: 3
Danke für die Antwort, aber daran liegt es leider auch nicht :(


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Feb 18, 2006 19:53 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
glBindTexture(GL_TEXTURE_2D, handle);
Das Handle ist nicht als Texture bekannt, da du es in der Texturladen-Procedure nur als lokale Variable hast.
Wenn du den Namen änderst (Namenkonflikt) und es zu einer globalen Variablen machst geht es.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Feb 18, 2006 21:20 
Offline
DGL Member

Registriert: Sa Feb 18, 2006 17:51
Beiträge: 3
Ah jetzt gehts, danke! :D


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Feb 19, 2006 01:55 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Kannst du nochmal folgendes ausprobieren (nur der neugier halber):
Den Code von oben nehmen, und das BindTexture in der renderprocedur rauswerfen.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Mär 05, 2006 11:57 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Mär 04, 2006 22:54
Beiträge: 32
Ich habe das ganze nun auch mal so probiert wie es hier steht und kam erst nicht zu recht :-(
Habe das Handle angepaßt (neuer Name - wegen dem Konflikt mit dem anderem Handle) und mich dann gewundert warum es immer noch nicht ging. Bis ich mir dann den Beitrag von Flash nochmal angeschaut habe und dann die procedure Texturladen an das Ende der Create procedure angehängt habe. Und dann ging alles.

@Flash: ja man kann die Zeile in der Render Procedure weglassen, es geht trotzdem.

_________________
Schönen Gruß, Sky.


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste


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:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.009s | 14 Queries | GZIP : On ]