[OpenGL] Ruch obserwatora

0

siema!

Robię projekt z OpenGL... zrobiłem scenę, oświetliłem, oteksturowałem... teraz przydało by się, żeby można się było po tym wszystkim poruszać :)
Szukam jakiegoś gotowego algorytmu poruszania się...

Sam coś napisałem ale obserwator zamiast się poruszać "płynie" :P

Jeśli macie jakiś dobry kod to będe wdzięczny... pomysły jak to zrobić też mile widziane ;)

dzięki i pozdro!

0

pomiedzy nowa klatka animacji trzeba pobraz czas
roznica = Aktualnyczas-staryczas;
staryczas=aktualnyczas;

mnozymy 'roznica' np. przez wersor kierunku

cos podobnego

t3dpoint __fastcall vectors_frontadd(t3dpoint v1, t3dpoint v2) 			//plaszczyzna XY
{
t3dpoint result;
result.x = v1.x+v2.x;
result.y = v1.y-v2.y;
result.z = v1.z-v2.z;

         return result;
}

glop to kat w boki mheading gora dol

SUPERPOINT.x = 100000.0f*(sin(glop*imopi)*cos(heading*imopi));
SUPERPOINT.z = 100000.0f*(cos(glop*imopi)*cos(heading*imopi));
SUPERPOINT.y = 100000.0f*(sin(heading*imopi));

funkcja glulookat pomoze przy zmianie kamery

gluLookAt(old.x,old.y,old.z,old.x+SUPERPOINT.x,
old.y-SUPERPOINT.y,old.z-SUPERPOINT.z,0,1,0);

Sprawy sie maja inaczej dla symulatorow lotu gdzie mozna krecic beczki itp. tutaj jedynie bedziezs sie poruszal jak w quake'u

0
k.x = 100000000.0f*(sin(particles[i].glop*imopi)*cos(particles[i].heading*imopi));
k.z = 100000000.0f*(cos(particles[i].glop*imopi)*cos(particles[i].heading*imopi));
k.y = 100000000.0f*(sin(particles[i].heading*imopi));
  k=Normalize(k);
       particles[i].pos = vectors_frontadd(particles[i].startpos,vector_multiple(k,power*(GetTickCount()-particles[i].time)/1000.0f));
------------------------------------

 particles[i].pos = vectors_frontadd(particles[i].pos,vector_multiple(k,2.00*power*(GetTickCount()-particles[i].time)/1000.0f)); //end else
		  
particles[i].time = GetTickCount();

dwie zasady poruszania sie

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