C++ OpenGL glTranslated

C++ OpenGL glTranslated
D9
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 6 lat
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:

Kopiuj
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.

Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 3 godziny
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.

Spine
  • Rejestracja:około 22 lata
  • Ostatnio:minuta
  • Postów:6685
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:

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

Pozycję zawsze zmieniasz o V:

Kopiuj
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):

Kopiuj
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:

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

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


🕹️⌨️🖥️🖱️🎮
edytowany 4x, ostatnio: Spine

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.