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

Aktuelle Zeit: Fr Jul 18, 2025 17:47

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: Do Apr 24, 2003 22:29 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 22, 2003 23:22
Beiträge: 10
hi Board!

ich habe mir eben das Tutorial Heightmaps1 angesehen und fleißig versucht die Skybox fertigzuproggen...

das Resultat ist ziemlich ernüchternd. Form1 wird grau wie immer angezeigt. :o ... Der Quellcode (von sky_main.pas) ist soweit wie möglich aus dem Beispielcode geklaut, da ich versucht habe, den Fehler so zu finden.

Der einzige Unterschied drüfte sein, dass mein formular Form1 heißt und das aus dem Beispiel SkyBoxForm oder sowas in der Art...

so jetzt kommts ganz dick: B)
Code:
  1.  
  2. unit Unit1;
  3.  
  4. interface
  5.  
  6. uses
  7.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  8.   Dialogs, OpenGL12, Geometry, AppEvnts, Textures;
  9.  
  10. const
  11.   FarClipping   = 5000.0;
  12.   NearClipping  = 1.0;
  13.  
  14. type
  15.   TForm1 = class(TForm)
  16.     procedure FormCreate(Sender: TObject);
  17.     procedure FormShow(Sender: TObject);
  18.     procedure FormDestroy(Sender: TObject);
  19.     procedure FormResize(Sender: TObject);
  20.     procedure ApplicationEventsIdle(Sender: TObject; var Done: Boolean);
  21.     procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
  22.       Shift: TShiftState; X, Y: Integer);
  23.     procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
  24.       Shift: TShiftState; X, Y: Integer);
  25.   private
  26.     OpenGLInitialized : Boolean;
  27.     RC : HGLRC;         //OpenGL Rendering Context
  28.     SkyBoxTexturen : Array[0..5] of TGlUInt;
  29.     StartTick : Cardinal;
  30.     Frames : LongInt;
  31.     XRotation, YRotation : Single;
  32.     MouseX, MouseY : LongInt;
  33.     { Private-Deklarationen }
  34.   public
  35.     { Public-Deklarationen }
  36.   end;
  37.  
  38. var
  39.   Form1: TForm1;
  40.  
  41. implementation
  42.  
  43. {$R *.dfm}
  44.  
  45. procedure TForm1.FormCreate(Sender: TObject);
  46. begin
  47.   //OpenGL ist noch nicht bereit
  48.   OpenGLInitialized := False;
  49.   //Kontrolle ob die Bilbliiotheken geladen sind
  50.   if not LoadOpenGL then
  51.     Halt(100)
  52. end;
  53.  
  54. procedure TForm1.FormShow(Sender: TObject);
  55.   procedure SetPixelFormat;
  56.   var
  57.     PixelFormat      : TGLuint;
  58.     PFD              : pixelformatdescriptor;
  59.   begin
  60.     with pfd do
  61.       begin
  62.         nSize:= SizeOf( PIXELFORMATDESCRIPTOR );
  63.         nVersion:= 1;
  64.         dwFlags:= PFD_DRAW_TO_WINDOW
  65.           or PFD_SUPPORT_OPENGL
  66.           or PFD_DOUBLEBUFFER;
  67.         iPixelType:= PFD_TYPE_RGBA;
  68.         cColorBits:= 16;
  69.         cRedBits:= 0;
  70.         cRedShift:= 0;
  71.         cGreenBits:= 0;
  72.         cBlueBits:= 0;
  73.         cBlueShift:= 0;
  74.         cAlphaBits:= 0;
  75.         cAlphaShift:= 0;
  76.         cAccumBits:= 0;
  77.         cAccumRedBits:= 0;
  78.         cAccumGreenBits:= 0;
  79.         cAccumBlueBits:= 0;
  80.         cAccumAlphaBits:= 0;
  81.         cDepthBits:= 16;
  82.         cStencilBits:= 0;
  83.         cAuxBuffers:= 0;
  84.         iLayerType:= PFD_MAIN_PLANE;
  85.         bReserved:= 0;
  86.         dwLayerMask:= 0;
  87.         dwVisibleMask:= 0;
  88.         dwDamageMask:= 0
  89.       end;
  90.     PixelFormat := ChoosePixelFormat(Canvas.Handle, @pfd);
  91.     if (PixelFormat=0) then
  92.       MessageDlg('Can''t find a suitable PixelFormat.', mtError, [mbOk], 0);
  93.     if (not Windows.SetPixelFormat(Canvas.Handle,PixelFormat,@pfd)) then
  94.       MessageDlg('Can''t set PixelFormat.', mtError, [mbOk], 0)
  95.   end; (*SetPixelFormat*)
  96.  
  97.   procedure StartGl;
  98.   begin
  99.     RC := wglCreateContext(Canvas.Handle);
  100.     if (RC=0) then
  101.     begin
  102.       MessageDlg('Can''t create RC', mtError, [mbOk], 0);
  103.       Halt(100)
  104.     end;
  105.  
  106.     if (not wglMakeCurrent(Canvas.Handle, RC)) then
  107.     begin
  108.       MessageDlg('Can''t activate RC', mtError, [mbOk], 0);
  109.       Halt(100)
  110.     end
  111.   end; (*StartGl*)
  112.  
  113.   procedure SetupGL;
  114.   begin
  115.     glClearColor(0.0, 0.0, 0.0, 0.0); //Hintergrundfarbe
  116.     glEnable(GL_DEPTH_TEST);
  117.     glEnable(gl_Cull_Face);
  118.  
  119.     glEnable(GL_TEXTURE_2D);
  120.     glShadeModel(GL_SMOOTH)
  121.   end; (*SetupGL*)
  122.  
  123.   procedure LoadTextures;
  124.   const
  125.     SkyTexturesName : Array[0..5] of String = ('north.jpg', 'east.jpg', 'south.jpg',
  126.       'west.jpg', 'top.jpg', 'bottom.jpg');
  127.   var
  128.     I : Integer;
  129.   begin
  130.     //Bilder für SkyBox laden
  131.     for I := 0 to 5 do
  132.       LoadTexture(SkyTexturesName[I], SkyBoxTexturen[I], False);
  133.   end;(*LoadTextures*)
  134.  
  135. begin
  136.   RC := 0;
  137.  
  138.   SetPixelFormat;
  139.   StartGL;
  140.  
  141.   //Extensions auslesen
  142.   ClearExtensions;
  143.   ReadExtensions;
  144.  
  145.   //GLStatus Variablen einstellen
  146.   SetupGL;
  147.   LoadTextures;
  148.  
  149.   Frames := 0;
  150.   StartTick := GetTickCount;
  151.  
  152.   OpenGLInitialized := True
  153. end;
  154.  
  155. procedure TForm1.FormDestroy(Sender: TObject);
  156. begin
  157.   OpenGLInitialized := False;
  158.  &nbsp;if RC<>0 then
  159.  &nbsp; &nbsp;begin
  160.  &nbsp; &nbsp; &nbsp;if (not wglMakeCurrent(Canvas.Handle,0)) then
  161.  &nbsp; &nbsp; &nbsp; &nbsp;MessageBox(0,'Release of DC and RC failed.',' Shutdown Error',MB_OK or MB_ICONERROR);
  162.  &nbsp; &nbsp; &nbsp;if (not wglDeleteContext(RC)) then
  163.  &nbsp; &nbsp; &nbsp; &nbsp;begin
  164.  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;MessageBox(0,'Release of Rendering Context failed.',' Shutdown Error',MB_OK or MB_ICONERROR);
  165.  &nbsp; &nbsp; &nbsp; &nbsp;end
  166.  &nbsp; &nbsp;end;
  167.  &nbsp;RC:=0
  168. end;
  169.  
  170. procedure TForm1.FormResize(Sender: TObject);
  171. begin
  172.  &nbsp;glViewport(0, 0, ClientWidth, ClientHeight);
  173.  &nbsp;glMatrixMode(GL_PROJECTION);
  174.  &nbsp;glLoadIdentity();
  175.  &nbsp;gluPerspective(60.0,ClientWidth/ClientHeight,NearClipping,FarClipping);
  176.  &nbsp;// hier wird das Verhätlnis zwischen errechnet Höhe und Breite der Oberfläche errechnet.
  177.  &nbsp;glMatrixMode(GL_MODELVIEW);
  178.  &nbsp;glLoadIdentity
  179. end;
  180.  
  181. procedure TForm1.ApplicationEventsIdle(Sender: TObject;
  182.  &nbsp;var Done: Boolean);
  183.  
  184.  &nbsp;procedure PaintSkyBox;
  185.  &nbsp;const
  186.  &nbsp; &nbsp;QuadPosition : Array[0..5] of Array[0..3] of Array[0..2] of Single =
  187.  &nbsp; &nbsp; &nbsp;(((2.005,2.005,-1.995),(2.005,-2.005,-1.995),(-2.005,-2.005,-1.995),(-2.005,2.005,-1.995)), &nbsp; &nbsp; //Nordseite
  188.  &nbsp; &nbsp; &nbsp; ((1.995,2.005,2),(1.995,-2.005,2),(1.995,-2.005,-2),(1.995,2.005,-2)), &nbsp; &nbsp; &nbsp; &nbsp; //Ostseite
  189.  &nbsp; &nbsp; &nbsp; ((-2.005,2.005,1.995),(-2.005,-2.005, 1.995),(2.005,-2.005,1.995),(2.005,2.005,1.995)), &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//Südseite
  190.  &nbsp; &nbsp; &nbsp; ((-1.995,2.005,-2),(-1.995,-2.005,-2),(-1.995,-2.005,2),(-1.995,2.005,2)), &nbsp; &nbsp; &nbsp;//Westseite
  191.  &nbsp; &nbsp; &nbsp; ((-2,2,-2),(-2,2,2),(2,2,2), (2,2,-2)),
  192.  &nbsp; &nbsp; &nbsp; ((2,-2,-2),(2,-2,2),(-2,-2,2),(-2,-2,-2)));
  193.  &nbsp; &nbsp;TexturePos : Array[0..3] of Array[0..1] of Single =
  194.  &nbsp; &nbsp; &nbsp;((1,1),(1,0),(0, 0),(0, 1));
  195.  &nbsp;var
  196.  &nbsp; &nbsp;Side, Vertex : Integer;
  197.  &nbsp;begin
  198.  &nbsp; &nbsp;for Side := 0 to 5 do
  199.  &nbsp; &nbsp;begin
  200.  &nbsp; &nbsp; &nbsp;//Textur aktivieren
  201.  &nbsp; &nbsp; &nbsp;glBindTexture(GL_TEXTURE_2D, SkyBoxTexturen[Side]);
  202.  &nbsp; &nbsp; &nbsp;glBegin(GL_QUADS);
  203.  &nbsp; &nbsp; &nbsp;//Vertieces und Tex Coords übergeben
  204.  &nbsp; &nbsp; &nbsp;for Vertex := 3 downto 0 do
  205.  &nbsp; &nbsp; &nbsp;begin
  206.  &nbsp; &nbsp; &nbsp; &nbsp;glTexCoord2fv(@TexturePos[Vertex][0]);
  207.  &nbsp; &nbsp; &nbsp; &nbsp;glVertex3fv(@QuadPosition[Side][Vertex][0])
  208.  &nbsp; &nbsp; &nbsp;end;
  209.  &nbsp; &nbsp; &nbsp;glEnd()
  210.  &nbsp; &nbsp;end
  211.  &nbsp;end; (*PaintSkyBox*)
  212. var
  213.  &nbsp;Error : LongInt;
  214. begin
  215.  &nbsp;Done := True;
  216.  &nbsp;if not OpenGLInitialized then Exit;
  217.  &nbsp;Done := False;
  218.  &nbsp;glClear(GL_DEPTH_BUFFER_BIT or GL_COLOR_BUFFER_BIT);
  219.  &nbsp;glLoadIdentity;
  220.  &nbsp;glRotatef(XRotation, 1, 0,0);
  221.  &nbsp;glRotatef(YRotation, 0, 1,0);
  222.  &nbsp;PaintSkyBox;
  223.  &nbsp;//Error Handler
  224.  &nbsp;Error := glgetError;
  225.  &nbsp;if Error <> GL_NO_ERROR then
  226.  &nbsp;begin
  227.  &nbsp; &nbsp;MessageBeep(65535);
  228.  &nbsp; &nbsp;Caption := gluErrorString(Error)
  229.  &nbsp;end;
  230.  &nbsp;//Frame Counter
  231.  &nbsp;Inc(Frames);
  232.  &nbsp;if GetTickCount - StartTick >=1000 then
  233.  &nbsp;begin
  234.  &nbsp; &nbsp;Caption := Format('Sky Box Demo FPS: %f', [Frames/(GetTickCount - StartTick)*1000]);
  235.  &nbsp; &nbsp;Frames := 0;
  236.  &nbsp; &nbsp;StartTick := GetTickCount
  237.  &nbsp;end;
  238.  &nbsp;SwapBuffers(Canvas.Handle)
  239. end;
  240.  
  241. procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  242.  &nbsp;Shift: TShiftState; X, Y: Integer);
  243. begin
  244.  &nbsp;MouseCapture := True;
  245.  &nbsp;MouseX := X;
  246.  &nbsp;MouseY := Y;
  247.  
  248. end;
  249.  
  250. procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
  251.  &nbsp;Shift: TShiftState; X, Y: Integer);
  252. begin
  253.  &nbsp;MouseCapture := False
  254. end;
  255.  
  256. end.
  257.  


.... meine unit.pas ... quasi das sky_main.pas aus dem Beispielcode.

greetz
//me :blink:

P.S. - wird OpenGL überhaupt richtig initialisiert? Irgendwie vermisse ich da etwas und außerdem deutet irgendwie alles daraufhin, da ich nur ein ganz normales Formular sehe!?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Apr 24, 2003 22:53 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Der Quellcode ist in Ordnung.Es wird deshalb nichts gezeichnet, weil deine Zeichenroutonen niemals aufgerufen werden.Dies geschieht wie leicht aus dem Quelltext zu entnehmen in TForm1.ApplicationEventsIdle.
Da du wohl einfach nur copy'n'paste gemacht hast (was übrigens ne sehr schlechte Idee ist), wird dieser Event allerdings nirgends zugewiesen und deshalb auch niemals aufgerufen.
Die Zuweisung dieses Events geschieht über die ApplicationEvents-Komponente, die du auf deine Form setzen mußt (Kategorie "Zusätlich").In der Eventliste dieser Komponente findest du auch das IdleEvent, das du dann zuweisen kannst.

P.S. : Es gibt hier auch ein Anfänger-Forum, das für solche Fragen gedacht ist...

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Apr 24, 2003 23:11 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Jan 04, 2003 21:23
Beiträge: 674
Wohnort: Köln
ich hab das grad mal ausprobiert, aber dann klappts auch noch nicht...

P.S.:Verschieb den Beitrag doch einfach...

_________________
. . .


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Apr 24, 2003 23:21 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 22, 2003 23:22
Beiträge: 10
ja also das Application.OnIdle := ApplicationEventsIdle; in formcreate hats gebracht ;) ...

nuja hab des forum gar nich bemerkt *g ...

greetz
//me


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Apr 24, 2003 23:26 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Jan 04, 2003 21:23
Beiträge: 674
Wohnort: Köln
echt? bei meinem Test nicht... naja , auch egal... ich habe ja meine eigene Heightmap, die so funktioniert, wie ich mir das vorstelle ;)

_________________
. . .


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 16 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.011s | 16 Queries | GZIP : On ]