C++ OpenGL glTranslated

0

Witam,
piszę program, lecz jestem w martwym punkcie a mianowicie:
Mam wczytany obiekt który chcę żeby się poruszał ma się poruszać tam i z powrotem osiągnąłem to takim kodem:

glTranslated(-klikniecia-7, 0, 0);
	glRotated(90, 0, 1, 0);
	if (klikniecia % 2 == 0){
		glTranslated(-3, 0, 0);
	}
	else {
		glTranslated(3, 0, 0);
	}
	item2.draw(); 

mój problem jest w tym że ten obiekt po prostu skacze z jednego punktu do drugiego(nie dziwię się bo tak jest napisany) lecz chciałbym aby poruszał się płynnie z jednego do drugiego punktu. Bardzo proszę o pomoc.

0

oto zarys: musisz rysować w pętli (cały czas), sprawdzać czas, jaki upłynął od poprzedniego rysowania i przesuwać obiekt o odległość proporcjonalną do tego czasu.

1

Dane:

  • pozycja obiektu (P)
  • prędkość obiektu (V), inicjujemy prędkością początkową V = new Vector2(3.0, 0.0);
  • pozycja startowa (xS) obiektu i pozycja x końcowa (xK) obiektu

Zmienne pomocnicze:

  • czy obiekt idzie tam (bool tam = true;)

Do translate zawsze podstawiasz pozycję P:

glTranslated(P.x, P.y, 0.0);

Pozycję zawsze zmieniasz o V:

P += V;

V można, a nawet trzeba w poważnej aplikacji przemnożyć przez czas trwania klatki (w powyższym wzorze). Powiedzmy, że chcesz obiekt przesunąć o 3
jednostki w przestrzeni w czasie jednej sekundy. W takim razie musisz V(3.0, 0.0) * czasTrwaniaKlatki;
Żeby niepotrzebnie nie komplikować (w takim prostym przykładzie), to czas trwania klatki możesz obliczyć dzieląc 1 przez ustawiony limit klatek na sekundę (wszystko na liczbach zmiennoprzecinkowych).

Kiedy x pozycja obiektu jest większa niż pozycja końcowa xK, to obiekt już nie idzie tam (idzie z powrotem):

if (P.x > xK && tam) {
   tam = false;
   V = new Vector2(-3.0, 0.0);
}

Poza tym, jeśli x pozycja obiektu jest mniejsza niż pozycja startowa xS, to obiekt idzie tam:

else if (P.x < xK && !tam) {
   tam = true;
   V = new Vector2(3.0, 0.0);
}

Pisane z palca, mogą zdarzyć się bugi ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1