Gra FPS- poruszanie obiektem w zależności gdzie patrzy gracz

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.

przyklad1.png

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:

przyklad1.png

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:

przyklad1.png

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?