• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Kamera jak w FPS z wykorzystaniem OpenGL

Object Storage Arubacloud
0 głosów
1,062 wizyt
pytanie zadane 9 grudnia 2016 w OpenGL, Unity przez Rivi Początkujący (320 p.)

Jestem w trakcie pisanie programu w OpenGL, który obsługuję kamerę za pomocą klawiatury i myszki tak jak w grach FPS. Jak dotąd udało mi się zaimplementować poruszanie się kamery w cztery strony za pomocą klawiatury(WSAD) oraz obracanie się obrazu przy użyciu myszki. Korzystałem przy tym z funkcji gluLookAt. Problem pojawia się, gdy np. obrócę kamerę za pomocą myszy o 180 stopni. Wtedy naciśnięcie klawisza W sprawia, że poruszamy się do tyłu. Chciałbym aby poruszanie się przed siebie było skierowane w stronę, w którą aktualnie patrzymy. Dowiedziałem się, że w rozwiązaniu tego problemu może pomóc glRotatef i glTraslatef. Nie wiem jednak dokładnie jak ich użyć. Jak wyliczyć kąt obrotu. Zamieszczam kawałek kodu, aby lepiej zobrazować problem. Proszę o pomoc.

float radians(float angle) {
	angle = angle*3.14 / 180;
	return angle;
}

void camera() {
	glLoadIdentity();
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
	gluLookAt(tx, 0, tz,
              tx + cos(radians(xGlob)) * cos(radians(yGlob)), 0, tz + sin(radians(xGlob)) * cos(radians(yGlob)),
              0.0, 1.0, 0.0);
	glutPostRedisplay();
}

void pozycjaMyszy(int x, int y)
{
	stalaX = x - stareX;
	stareX = x;

	stalaY = stareY - y;
	stareY = y;

	float czulosc = 0.5;
	stalaX *= czulosc;
	stalaY *= czulosc;

	xGlob += stalaX; //yaw
	yGlob += stalaY; //pitch

	camera();
}

1 odpowiedź

0 głosów
odpowiedź 9 grudnia 2016 przez lnkoc Stary wyjadacz (13,960 p.)
wybrane 9 grudnia 2016 przez Rivi
 
Najlepsza

Podczas naciskania klawiszy podejrzewam, że dodajesz jakieś wartości do zmiennych położenia kamery według globalnego układu współrzędnych. Zatem jeśli poruszasz się np. klawiszem "w" dodajesz wartość według jednej współrzędnej globalnego układu współrzędnych np. osi x.

Jeśli chcesz aby Twój układ klawiszy "wsad" zmieniał się wraz z obrotami powinieneś użyć zmiennej globalnej np. alpha odpowiadającej za kąt obrotu względem którejś z osi np. y, który zmieniałby się wraz z obrotem kamery (ruchem myszki) i następnie względem tego kąta (odpowiednio sin(alpha) i cos(alpha)) powinieneś liczyć składowe x i y, które dodajesz do położenia obserwatora (pierwsze trzy parametry) funkcji gluLookAt(); Aby nie mieć problemów z tym na co kamera patrzy, wartości które obliczyłeś do dodania dodajesz do kierunku na który skierowana jest kamera.

Dowiedziałem się, że w rozwiązaniu tego problemu może pomóc glRotatef i glTraslatef

Jeśli dobrze operujesz funkcją gluLookAt() nie musisz obracać ani przesówać sceny przy użyciu tych funkcji. No bo jeśli operujemy obserwatorem nie ma takiej potrzeby.  

Edit: Jeśli coś jest niejasne to pisz.

Podobne pytania

0 głosów
1 odpowiedź 280 wizyt
pytanie zadane 9 sierpnia 2017 w OpenGL, Unity przez Emil Panecki Bywalec (2,100 p.)
0 głosów
2 odpowiedzi 419 wizyt
pytanie zadane 16 września 2015 w C i C++ przez Avernis Nałogowiec (27,400 p.)
–1 głos
1 odpowiedź 200 wizyt

92,555 zapytań

141,402 odpowiedzi

319,539 komentarzy

61,938 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...