AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia OpenGL Maximieren funktioniert nicht?
Thema durchsuchen
Ansicht
Themen-Optionen

OpenGL Maximieren funktioniert nicht?

Ein Thema von Destroxi · begonnen am 29. Okt 2011 · letzter Beitrag vom 31. Okt 2011
Antwort Antwort
Destroxi

Registriert seit: 29. Okt 2011
55 Beiträge
 
Delphi 7 Enterprise
 
#1

OpenGL Maximieren funktioniert nicht?

  Alt 29. Okt 2011, 20:57
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?

Geändert von Destroxi (29. Okt 2011 um 23:16 Uhr)
  Mit Zitat antworten Zitat
Cicaro

Registriert seit: 9. Feb 2005
285 Beiträge
 
Delphi 7 Personal
 
#2

AW: OpenGL Maximieren funktioniert nicht?

  Alt 31. Okt 2011, 00:10
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.
  Mit Zitat antworten Zitat
Destroxi

Registriert seit: 29. Okt 2011
55 Beiträge
 
Delphi 7 Enterprise
 
#3

AW: OpenGL Maximieren funktioniert nicht?

  Alt 31. Okt 2011, 13:34
Danke
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:22 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