AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia [OpenGl] Anfängerfrage - Rechteck bewegen
Thema durchsuchen
Ansicht
Themen-Optionen

[OpenGl] Anfängerfrage - Rechteck bewegen

Ein Thema von SunSet · begonnen am 8. Apr 2011 · letzter Beitrag vom 8. Apr 2011
Antwort Antwort
SunSet

Registriert seit: 1. Mär 2010
42 Beiträge
 
Delphi 7 Enterprise
 
#1

[OpenGl] Anfängerfrage - Rechteck bewegen

  Alt 8. Apr 2011, 16:31
Hallo,
ist ja schon fast peinlich aber ich bekomme es einfach nicht hin ein Rechteck per Pfeiltasten zu bewegen. Also ich habe ein ganz einfaches Rechteck gezeichnet:
Delphi-Quellcode:
Glbegin(gl_quads);
 gltexcoord2f(0,0);
 glVertex3f( 2 , -1.9, -5);
 gltexcoord2f(0,1);
 glVertex3f( 1 , -1.9, -5);
 gltexcoord2f(1,1);
 glVertex3f( 1 , -2, -5);
 gltexcoord2f(1,0);
 glVertex3f( 2 , -2, -5);
glend;
Soweit ist das ja kein problem, das Bewegen habe ich wie folgt versucht zu realisieren:
Delphi-Quellcode:
if Ord(Key) = vk_left then begin
 Glbegin(gl_quads);
  gltranslate(-1,0,0);
 glend;
end;
Das ganze steht natürlich im FormKeyDown-Ereignis, klappt aber nicht. Ich hab einiges dazu gelesen und mir ist aufgefallen das gltranslate vor dem zeichnen aufgerufen werden muss, nur ich möchte das Rechteck ja per Pfeiltasten bewegen. Muss ich das Rechteck dann bei jedem Tastendruck neuzeichnen und bewegen oder wie? Ich hoffe ihr versteht wo mein Problem liegt und könnt mir helfen, da ich in Sachen OpenGl noch ein echter Anfänger bin
  Mit Zitat antworten Zitat
Benutzerbild von bigben37
bigben37

Registriert seit: 19. Dez 2007
Ort: Freiburg
116 Beiträge
 
Delphi 2009 Professional
 
#2

AW: [OpenGl] Anfängerfrage - Rechteck bewegen

  Alt 8. Apr 2011, 16:39
Hallo SunSet,

das Problem besteht darin, dass das OpenGL Koordinatensystem mit all seinen Transformationen am Anfang jedes Renderns auf seinen Ursprungszustand gesetzt wird. Also verschiebst du bei deinem Klick das Rechteck immer um die gleiche Strecke.
Deshalb nimmst du am besten eine Variable, in der du die Strecke zum verschieben speicherst, diese dann beim Key Event veränderst und dann das Koordinatensystem transformierst und schließlich das Quad zeichnest.

Noch eine Anmerkung: Das Transformieren vor glBegin aufrufen:
Delphi-Quellcode:
procedure Render;
begin
  //Initialisieren ...

  glTranslated(dx, 0, 0); //dx immer im OnKey ändern

  glBegin(GL_QUADS);
  //hier jetzt dein quad
end;
Benjamin
Optimismus ist nur ein Mangel an Information
  Mit Zitat antworten Zitat
SunSet

Registriert seit: 1. Mär 2010
42 Beiträge
 
Delphi 7 Enterprise
 
#3

AW: [OpenGl] Anfängerfrage - Rechteck bewegen

  Alt 8. Apr 2011, 16:48
Danke, klappt Nur sieht das ganze ziemlich verzerrt aus wenn ich es bewege, woran liegt das?
DoubleBuffered ist auf true, wobei ich eher denke das es am Timer liegt oder?
  Mit Zitat antworten Zitat
Benutzerbild von bigben37
bigben37

Registriert seit: 19. Dez 2007
Ort: Freiburg
116 Beiträge
 
Delphi 2009 Professional
 
#4

AW: [OpenGl] Anfängerfrage - Rechteck bewegen

  Alt 8. Apr 2011, 18:14
Wenn du im OnKeyDown den Wert der Verschiebung einfach so veränderst, kann es sein dass zwischen 2x rendern unterschiedlich viele mal das Event aufgerufen wird. Deshalb würd ich im OnKeyDown einen boolean setzen, die festhält, dass die taste gedrückt wurde. In deinem Timer überprüfst du dann, ob die variable gesetzt worden ist. Wenn ja, dann die zu verschiebende Strecke ändern und den boolean wieder auf false setzen, damit sich das Quad nur wieder bewegt, wenn der boolean von dem keydown geändert wird.
Falls das jetzt zu kompliziert formuliert war^^:
Delphi-Quellcode:
var
  MoveLeft: Boolean;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if Key = VK_LEFT then
    MoveLeft := true;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if MoveLeft then
  begin
    dx := dx - 5;
    MoveLeft := false;
  end;
end;
Benjamin
Optimismus ist nur ein Mangel an Information
  Mit Zitat antworten Zitat
SunSet

Registriert seit: 1. Mär 2010
42 Beiträge
 
Delphi 7 Enterprise
 
#5

AW: [OpenGl] Anfängerfrage - Rechteck bewegen

  Alt 8. Apr 2011, 18:29
Ne, haste gut erklärt. Da hast du auch vollkommen Recht, ist ja logisch.
Vielen Dank
  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 15:25 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