Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   OpenGL Maximieren funktioniert nicht? (https://www.delphipraxis.net/164129-opengl-maximieren-funktioniert-nicht.html)

Destroxi 29. Okt 2011 19:57

OpenGL Maximieren funktioniert nicht?
 
Ich habe ein OpenGL Proggi da funzt alles nur die Werte stimmen nicht mehr wenn ich das Fenster vergrößere.
X=1 sollte ja immer rechts sein...

Code:
Delphi-Quellcode:
procedure TForm1.Render(Sender: TObject; var Done: Boolean);
var
 Geschwindigkeit: Single;
 i: Integer;
begin
 glClear(GL_COLOR_BUFFER_BIT);

 Geschwindigkeit := 0.65;

 glEnable(GL_TEXTURE_2D);
 glEnable(GL_ALPHA_TEST);
 glAlphaFunc(GL_GREATER, 0.1);
 glEnable(GL_CULL_FACE);
 glCullFace(GL_GREEN);

 For i := 1 to FrameObjekte do
 begin
  glBindTexture(GL_TEXTURE_2D, Frame[i].SavedFrame[Round(CurrentFrame[i])]);
  CurrentFrame[i] := CurrentFrame[i] + Geschwindigkeit;
  If CurrentFrame[i] > NumFrames[i]-1 then CurrentFrame[i] := 0;
  glBegin(GL_QUADS);
   glTexCoord2f(Frame[i].ALeft,Frame[i].ABot); glVertex2f(Frame[i].ALeft,Frame[i].ABot);
   glTexCoord2f(Frame[i].ARight,Frame[i].ABot); glVertex2f(Frame[i].ARight,Frame[i].ABot);
   glTexCoord2f(Frame[i].ARight,Frame[i].ATop); glVertex2f(Frame[i].ARight,Frame[i].ATop);
   glTexCoord2f(Frame[i].ALeft,Frame[i].ATop); glVertex2f(Frame[i].ALeft,Frame[i].ATop);
  glEnd;
 end;

 SwapBuffers(DC);

 Done := False;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
 i1, i2: Integer;
 TexNummer: String;
begin
 // OpenGL Inialitisieren
 DC := GetDC(Handle);
 If not InitOpenGL then Halt;
 RC := CreateRenderingContext(DC, [opDoubleBuffered], 32, 24, 0, 0, 0, 0);
 ActivateRenderingContext(DC, RC);

 // Frames laden
 For i1 := 1 to FrameObjekte do
 begin
  CurrentFrame[i1] := 0;
  SetLength(Frame[i1].SavedFrame, NumFrames[i1]);
  For i2 := 0 to NumFrames[i1]-1 do
  begin
   TexNummer := IntToStr(i2);
   If i2 < 10 then
    TexNummer := '0'+Texnummer;
   LoadTexture(FramePfad[i1]+TexNummer+'.tga', Frame[i1].SavedFrame[i2], False)
  end;
 end;

 // Positions angaben für Objekt 1
 Frame[1].ALeft := 0;
 Frame[1].ABot := 0;
 Frame[1].ATop := 1;
 Frame[1].ARight := 1;
 
 // Positions angaben für Objekt 2
 Frame[2].ALeft := 0;
 Frame[2].ABot := -1;
 Frame[2].ATop := 0;
 Frame[2].ARight := 1;

 // Resize erlauben und Formgröße auf Fullscreen bringen
 AppCanResize := True;
 WindowState := wsMaximized;    

 Timer1.Enabled := False;
 Timer2.Enabled := True;
end;

procedure TForm1.FormCanResize(Sender: TObject; var NewWidth,
  NewHeight: Integer; var Resize: Boolean);
begin
 Resize := AppCanResize;
end;

procedure TForm1.Timer2Timer(Sender: TObject);
var
 TempBool: Boolean;
begin
 Application.OnIdle := Render;
 TempBool := False;
 Render(Self, TempBool);

 Timer2.Enabled := False;
end;
Warum funzt das nicht?

Cicaro 30. Okt 2011 23:10

AW: OpenGL Maximieren funktioniert nicht?
 
Ich sehe nicht, wo du deine Resize-Funktion hast. Wenn sich die Fenstergröße ändert, muss auch dein Viewport eingestellt weden.

Ich mach immer so (bei jeder Fenstergrößenänderung aufrufen):
Delphi-Quellcode:
procedure ResizeViewport(Wnd: HWND);
begin
  ClientRect := GetClientRect(Wnd);
  OpenGL.glViewport(0, 0, ClientRect.Right - ClientRect.Left, ClientRect.Bottom - ClientRect.Top);
  OpenGL.glMatrixMode(OpenGL.GL_PROJECTION);
  OpenGL.glLoadIdentity();
  OpenGL.glOrtho(0.0, VIEWPORT_WIDTH, 0.0, VIEWPORT_HEIGHT, -10.0, 10.0);
  OpenGL.glMatrixMode(OpenGL.GL_MODELVIEW);
  OpenGL.glLoadIdentity();
end;
Musst eventuell noch etwas an dein Projekt anpassen aber so klappt es bei mir einwandfrei.

Destroxi 31. Okt 2011 12:34

AW: OpenGL Maximieren funktioniert nicht?
 
Danke ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:17 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz