Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi OpenGL bewegen von Objekten geht schief (https://www.delphipraxis.net/144224-opengl-bewegen-von-objekten-geht-schief.html)

Chefx 5. Dez 2009 14:41

Re: OpenGL bewegen von Objekten geht schief
 
ich hab keine ahnung woran das liegt.
hier die Tastaturabfrage:
Delphi-Quellcode:
  // Tasten
  if Getkeystate(VK_LEFT) < 0 then
      if xk > -950 then
          begin
            xk:=xk-5;
            xap:=0.5;
          end;
  if Getkeystate(VK_RIGHT) < 0 then
      if xk < 950 then
          begin
            xk:=xk+5;
            xap:=-0.5;
          end;
  if Getkeystate(VK_UP) < 0 then
      If zk >-950 then
          begin
            zk:=zk-5;
            zap:=0.5;
          end;
 if Getkeystate(VK_DOWN) < 0 then
      If zk < 950 then
          begin
            zk:=zk+5;
            zap:=-0.5;
          end;
ich hab auch den quellcode oben gepostet^^ wenn du noch mehr wissen willst, oder frag einfach nach^^

Zitat:

Zitat von Lumpiluk
Ich weiß im Moment leider nicht genau, wie du das ganze drehen möchtest.

das ist mir erstmal "egal" bloß das ich mal von "einem anderen sehen" kann wie er das machen würde :stupid:
Zitat:

Zitat von Lumpiluk
Würfel und Haus zusammen um die Y-Achse (in etwa so, als wäre der Würfel fest im "Garten" des Hauses installiert und man dreht sich darum)

das wäre vieleicht erstmal das beste^^

Lumpiluk 5. Dez 2009 15:08

Re: OpenGL bewegen von Objekten geht schief
 
Delphi-Quellcode:
var
  rotX, rotY, rotZ, transX, transY, transZ, TimeFactor: Single;
  StartTime, LoopTime: Integer;

//...

procedure Render;
begin
  LoopTime := gettickcount-starttime;
  TimeFactor := LoopTime*0.00000000001+1;
  StartTime := gettickcount;

  //keys
  if Active = True then
  begin
    if getasynckeystate(vk_down) < 0 then rotx := Rotx + 1*(TimeFactor);
    if getasynckeystate(vk_up) < 0 then rotx := Rotx - 1*(TimeFactor);
    if getasynckeystate(vk_left) < 0 then roty := Roty - 1*(TimeFactor);
    if getasynckeystate(vk_right) < 0 then roty := Roty + 1*(TimeFactor);
    if getasynckeystate(ord('D')) < 0 then transx := transx - 0.01*(TimeFactor);
    if getasynckeystate(ord('A')) < 0 then transx := transx + 0.01*(TimeFactor);
    if getasynckeystate(ord('W')) < 0 then transy := transy - 0.01*(TimeFactor);
    if getasynckeystate(ord('S')) < 0 then transy := transy + 0.01*(TimeFactor);
    if (getasynckeystate(ord('Q')) < 0) and (transz + 0.01*TimeFactor > 0) then
      transz := transz + 0.01*(TimeFactor);
    if (getasynckeystate(ord('E')) < 0) and (transz - 0.01*TimeFactor > 0) then
      transz := transz - 0.01*(TimeFactor);
    if getasynckeystate(vk_prior) < 0 then rotz := rotz + 1*(TimeFactor); //Bild auf
    if getasynckeystate(vk_next) < 0 then rotz := rotz - 1*(TimeFactor); //Bild ab
    if getasynckeystate(ord('R')) < 0 then
    begin
      rotx := 0; roty := 0; rotz := 0; transx := 0; transy := 0; transz := 1;
    end;

    if rotx > 360 then rotx := rotx - 360;
    if roty > 360 then roty := roty - 360;
    if rotz > 360 then rotz := rotz - 360;
  end;

  //...

  glTranslatef(0,0,-2);

  gltranslatef(transx,transy,0);
  glRotatef(Rotx,1,0,0);
  glRotatef(Roty,0,1,0);
  glRotatef(Rotz,0,0,1);

  //... Haus und Würfel zeichnen
end;
Sieht jetzt zwar nicht so schön aus, aber meistens mache ich es so ähnlich und es funktioniert ;)
Der 'TimeFactor' bewirkt übrigens, dass sich bei unterschiedlichen Frameraten alles immernoch genauso schnell bewegt.

Chefx 5. Dez 2009 16:05

Re: OpenGL bewegen von Objekten geht schief
 
meine These ist
der render falsch

es ist immernoch aber jetzt hab ich das gefühl das der das falsch render.
ich hab jetzt deins eingebaut. aber das sieht mir noch so aus wenn ich von oben schaue und drehe japp funktioniert in jeder position wo der würfel das haus berührt ist der würfel hinter dem haus.
aber warum ? muss noch eine einstellung geändert werden?

Lumpiluk 5. Dez 2009 16:11

Re: OpenGL bewegen von Objekten geht schief
 
Ich verstehe nicht ganz, was du meinst. Ist der Würfel vielleicht so nah an der Kamera, dass er wieder hinter dem Betrachter ist?
Vielleicht lädtst du dein Programm einfach mal hoch...

Chefx 5. Dez 2009 16:41

Re: OpenGL bewegen von Objekten geht schief
 
Liste der Anhänge anzeigen (Anzahl: 1)
oben ist das ganze projekt zu finden einmal der gesamte quelltext(scoure.zip) und ganz oben die exe und die bilder ...
hier das aktuelle(bloß die exe also oben alles downloaden und die exe austauschen)

Lumpiluk 5. Dez 2009 17:23

Re: OpenGL bewegen von Objekten geht schief
 
'tschuldigung, hatte deine Anhänge vorher irgendwie übersehen :oops:

Das sieht wirklich merkwürdig aus. Ich habe mal versucht, das zu kompilieren, aber bei mir gibt es da irgendwo eine Zugriffsverletzung...

Ich bin mir deshalb nicht sicher, ob es was bringt, aber hast du schonmal
Delphi-Quellcode:
glEnable(gl_DEPTH_TEST);
probiert?
http://wiki.delphigl.com/index.php/Tiefentest

Chefx 5. Dez 2009 18:41

Re: OpenGL bewegen von Objekten geht schief
 
es klappt,
wegen diesen einen befehl, hat es mich zum verzweifeln gebracht :-D
Zitat:

Zitat von Lumpiluk
'tschuldigung, hatte deine Anhänge vorher irgendwie übersehen

macht doch nix, kann jeden mal passieren

vielen dank Lumpiluk für deine Hilfe :thumb: :thumb: :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:04 Uhr.
Seite 2 von 2     12   

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