Witam,
mam dosyć skomplikowany problem. Postaram się go opisać jak najprościej:
mam grę FPS. Załóżmy że gracz sobie biegnie, rozgląda się na około i znalazł piłkę.
Chciałbym żeby piłka widniała mu przed oczami bez względu na to w którą stronę się spojrzy.
Na obrazku powyżej przedstawiłem co mi się już udało: udało mi się zrobić tak, że piłka jest przed oczami gracza w tej samej odległości niezależnie gdzie się spojrzy, ale tylko w lewo i prawo. Jeżeli spojrzę się w górę stanie się coś takiego:
Jak widać piłka wznosi się w górę lub spada w dół, jednak w zależności od kąta, piłka ma różną odległość od wzroku gracza.
Natomiast ja chciałbym uzyskać taki efekt:
ale bez zmiany tego gdy spojrzy się w prawo/lewo.
Mam nadzieję że jest to zrozumiałe. Teraz kawałek kodu:
wsp1w += cos((zm.lookLeftRight-90)*piover180) * zm.oddalmyszke;
wsp2w += sin((zm.lookLeftRight-90)*piover180) * zm.oddalmyszke;
wsp3w += cos((zm.lookUpDown+90)*piover180) * zm.oddalmyszke;
//wsp2w += sin((zm.lookUpDown+90)*piover180) * zm.oddalmyszke;
glColor3f(1.0f,1.0f,1.0f);
//glRotatef(zm.lookLeftRight,0.0f,1.0f,0.0f); //Obrot w osi Y
float plus1 = 0.03;
glBegin(GL_TRIANGLES);
glColor3f(1,1,0);
glVertex3f(wsp1w+0,wsp3w+plus1,wsp2w+0);
glVertex3f(wsp1w-plus1,wsp3w+-plus1,wsp2w+plus1);
glVertex3f(wsp1w+plus1,wsp3w+-plus1,wsp2w+plus1);
//glColor3f(1,0,0);
glVertex3f(wsp1w+0,wsp3w+plus1,wsp2w+0);
glVertex3f(wsp1w+plus1,wsp3w+-plus1,wsp2w+plus1);
glVertex3f(wsp1w+plus1,wsp3w+-plus1,wsp2w-plus1);
//glColor3f(0,1,0);
glVertex3f(wsp1w+0,wsp3w+plus1,wsp2w+0);
glVertex3f(wsp1w+plus1,wsp3w+-plus1,wsp2w-plus1);
glVertex3f(wsp1w-plus1,wsp3w+-plus1,wsp2w-plus1);
//glColor3f(0,0,1);
glVertex3f(wsp1w+0,wsp3w+plus1,wsp2w+0);
glVertex3f(wsp1w-plus1,wsp3w+-plus1,wsp2w+plus1);
glVertex3f(wsp1w-plus1,wsp3w+-plus1,wsp2w-plus1);
glEnd();
W tej chwili ten kod działa poprawnie tylko w połowie: czyli jeżeli spojrzymy w prawo/lewo jest dobrze - trójkąty (w tym przypadku) wyświetlją się zawsze w tej samej odległości od oczu gracza. Natomiast gdy spojrzę w górę/dół systuacja wygląda jak na obrazku 2.
Pytanie: co zrobić żebym uzyskał żądany efekt?