Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[Open GL, Freeglut 2.8.1] Pozycja myszki w świecie

Ostatnio zmodyfikowano 2014-12-15 18:55
Autor Wiadomość
kalvy
Temat założony przez niniejszego użytkownika
[Open GL, Freeglut 2.8.1] Pozycja myszki w świecie
» 2014-12-11 17:56:12
Witam. Bardzo potrzebuję funkcji, która zwróci mi położenie kursora w przestrzeni gry. Znalazłem coś takiego w kursie NeHe i dopasowałem do swojego kodu:

C/C++
CVector3 GetOGLPos( int x, int y )
{
    GLint viewport[ 4 ];
    GLdouble modelview[ 16 ];
    GLdouble projection[ 16 ];
    GLfloat winX, winY, winZ;
    GLdouble posX, posY, posZ;
   
    glGetDoublev( GL_MODELVIEW_MATRIX, modelview );
    glGetDoublev( GL_PROJECTION_MATRIX, projection );
    glGetIntegerv( GL_VIEWPORT, viewport );
   
    winX =( float ) x;
    winY =( float ) viewport[ 3 ] -( float ) y;
    glReadPixels( x, int( winY ), 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, & winZ );
   
    gluUnProject( winX, winY, winZ, modelview, projection, viewport, & posX, & posY, & posZ );
   
    return CVector3( posX, posY, posZ );
}

Jednakże ta funkcja zwraca mi pozycję myszki na środku ekranu niezależnie gdzie jak daleko przesunę kamerę w inne miejsce. Dodam, że ruszanie myszką przy krańcach ekranu zmienia tą obliczoną pozycję myszki ok. -1/+1 (od środka ekranu).
Za wszelką pomoc dziękuję.
P-122699
DejaVu
» 2014-12-12 23:32:44
Musisz uwzględniać położenie kamery w przesunięciu myszy. Poza tym położenie myszy na ekranie jest mocno względną sprawą, ponieważ w zależności od kąta nachylenia kamery i wartości Z położenie myszy na ekranie będzie różne. Wyobraź sobie sześcian, i pociągnij w nim linię od środka jednej podstawy do drugiej podstawy. Następnie postaw kursor myszy w punkcie w którym zaczyna się narysowana przez Ciebie linia. Później odpowiedz sobie na pytanie: gdzie tak na dobrą sprawę jest mysz w przestrzeni, skoro podajesz tylko dwa wymiary (x,y) położenia myszy.

Jeżeli robisz projekt 2D to użyj biblioteki SFML. Jeżeli chcesz kamerę 3D to użyj biblioteki Irrlicht. Irrlicht ponoć jest fajny do 3D ale obsługę czcionek ma beznadziejną. OGRE 3D jest ponoć jeszcze lepszy od Irrlichta, ale liczba zależności od innych bibliotek jest na tyle duża, że zniechęca ona z miejsca. A tak najlepiej jak już chcesz jakąkolwiek robić grę to poucz się po prostu Unity 3D.
P-122770
kalvy
Temat założony przez niniejszego użytkownika
» 2014-12-13 15:54:53
Do szkoły robię grę i nie mogę używać unity. Musi być OpenGL. Podam na przykładzie o co mi chodzi. Tworzę tower defence no i potrzebuję tego położenia myszki żeby np. przy kliknięciu stawiać wieżyczki z pozycją kursora pomijając oś Z bo każdy tower będzie stał na tej samej wysokości. Czyli w sumie potrzeba mi x,y myszki w przestrzeni gry.
P-122797
Gabes
» 2014-12-13 16:51:03
Jeśli przyjmiemy pozycje Y płaszczyzny(powierzchni na której będziemy umieszczać obiekty) jako zero, to zostaną do odczytu dwa parametry myszki:
poz_x - lewo, prawo ( dla osi X )
poz_y - góra, dół   ( dla osi Z ).
P-122800
kalvy
Temat założony przez niniejszego użytkownika
» 2014-12-13 19:00:11
No tak. Wszystko się zgadza, tylko właśnie chciałbym się dowiedzieć jak uzyskać wspomnianą u Ciebie poz_x i poz_y jeśli dysponuję jedynie wartościami położenia myszki na ekranie (x od 0 do 1365, y od 0 do 767)?
Dodam, że
P-122815
DejaVu
» 2014-12-13 22:12:34
C/C++
pozycjaMyszkiNaScenie.x = pozycjaMyszkiNaEkranie.x + przesuniecieKamery.x;
pozycjaMyszkiNaScenie.y = pozycjaMyszkiNaEkranie.y + przesuniecieKamery.y;
P-122833
kalvy
Temat założony przez niniejszego użytkownika
» 2014-12-14 14:37:32
Takie coś zadziała jak mam kamerę tak ustawioną, że każda jednostka długości odpowiada jednemu pikselowi. A co zrobić, gdy mam zooma, albo mam małe obiekty i te jednostki są małe?
P-122856
DejaVu
» 2014-12-15 18:55:28
Uwzględnić zooma. To są podstawy matematyki...
P-122900
« 1 »
  Strona 1 z 1