ďťż

Ładny brzuch

Chciałbym umieścić w moim progsie sterowanie myszą i
klawiaturą, które umożliwiałoby ruchy takie jak w FPS'ach,
np. Medal of Honor. Posuwanie się za pomocą klawiatury to
jeszcze nic, ale jak ustawić kamerę za pomocą funcji gluLookAt
lub za pomocą przekształceń, aby osiągnąć taki efekt?(obroty wokół osi y i x oczywiście)

PS
czy za pomocą DirectInput można dowiedzieć się, czy mysz dotarła do końca ekranu?



gluLookAt( A.x, A.y, A.z, B.x, B.y, B.z, 0, 1, 0 );

A - Pozycja obserwatora
B - cel patrzenia
Trzy ostatnie parametry są od oriętacji "gdzie jest góra" i radzę je ustawić na stałą wartość.

Mój kod sterowania widokiem za pomocą myszy:
UWAGA: Wymagany nagłówek windows.h!
void Mouse() { POINT mousePos; float modByX = 0; float modByY = 0; int mid_X = 800 >> 1; // Pozycja środka ekranu na szerokości. int mid_Y = 600 >> 1; // Pozycja środka ekranu na wysokości. GetCursorPos(&mousePos); //Obecna pozycja kursora. SetCursorPos(mid_X, mid_Y); //Nowa pozycja kursora (na środku) // Wyliczanie o ile było posunięcie od środka ekranu (0.06 to o ile // ZMNIEJSZYĆ wynik (bo jest za duży jak na kąt)) modByX = ((float)mousePos.x - (float)mid_X) * 0.06f; modByY = ((float)mousePos.y - (float)mid_Y) * 0.06f; // dodanie wartości do zmiennych globalnych theta += modByX; beta += modByY; // wyliczenie celu patrzenia na podstawie kąta (look jest strukturą) look.x = 2 * sin(Pi / 180 * -theta); look.z = 2 * cos(Pi / 180 * theta); look.y = 2 * cos(Pi / 180 * -beta); }
Funkcje najlepiej wywołać w każdej klatce przed procesem renderingu.

I am the REAL Noname
Moja strona: www.coderulers.prv.pl | Moje Forum
C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do, it blows away your whole leg." - Bjarne Stroustrup, twórca języka C++

THX, to działa, ale:
dodałem x i y, które oznaczają położenie obserwatora(zmieniane
klawiaturą), aby zapobiec "okrążania" początku współrzędnych
look.x = x+(2 * sin(Pi / 180 * -theta));
look.z = z+(2 * cos(Pi / 180 * theta));
look.y = 2 * cos(Pi / 180 * -beta);
Teraz(zresztą przedtem też) występuje największy błąd:
jeśli np. obrócę się w prawo i chcę iść do przodu, to
"kamera" porusza się do ujemnej wartości z(zamiast w skazanym
kierunku). Podobnie problem jest z osią x. Co zrobić, aby temu zapobiec?

Zamiast męczyć się z kodem,lepiej użyć pakietu GLScene ( http://glscene.org ).:cheesy:

Jest on o wiele prostszy ;)

Zasady są po to,aby je łamać... :crowd:

Tel.: 506 625 248
E-mail: patryknusbaum@interia.pl
GG: 1132996



Nie, ja chcę zrrobić wszystko sam, żeby później mieć pełną świadomość że to moe dzieło:cheesy:

cytat:gokudbz napisał:

Nie, ja chcę zrrobić wszystko sam, żeby później mieć pełną świadomość że to moe dzieło:cheesy:

APLAUZ :aplause: za chęci dla gokudbz :! :cheesy:

Skoro tak,to ja nie potrafię Ci pomóc :roll:

Zasady są po to,aby je łamać... :crowd:

Tel.: 506 625 248
E-mail: patryknusbaum@interia.pl
GG: 1132996

Masz tu coś, co prawda w delphi, ale myślę, że sobie poradzisz :Dhttp://www.cyrkiel.webpark.pl/ce.zipjest tu poruszanie się, obsługa myszy i celowanie ;)

--------------------
-=[ Delphi rUlzZz ]=-

No cóż, kodu na poruszanie nie podam, bo jest wbudowany w moją klasę "żyjątek", ale powiem, że można to wyliczyć IDENTYCZNIE jak w przypadku widoku. Ja to zrobiłem tak, że look jest wstawiany do klasy gracza jako wektor, a przy ruchu składowe wektora są dodawane do pozycji gracza (bez Y, bo jeszcze podłogi nie zrobiłem). Dlatego w moich obliczeniach zabrakło pozycji gracza - jest ona dodawana przy wywołaniu funkcji gluLookAt. Pewnie zauważyłeś, że wynik pozycji look przemnażam przez 2 - to jest o ile ma się poruszać bochater w każdą stronę. Mam nadzieje, że ci to pomoże

I am the REAL Noname
Moja strona: www.coderulers.prv.pl | Moje Forum
C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do, it blows away your whole leg." - Bjarne Stroustrup, twórca języka C++

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •