Mrusio Temat założony przez niniejszego użytkownika |
[OpenGL] rzutowanie » 2012-02-19 12:26:23 Witam, dopiero uczę się OpenGl`a. Udało mi się zrobić kamerę którą można sterować, tak jak w grach 3D. Chciałbym dodać na środek ekranu celownik.
Czy wykorzystując "gluLookAt" do sterowania kamerą (rozglądanie się i przesuwanie po scenie) można jednocześnie dla wybranego elementu zastosować rzutowanie prostokątne, tak aby element był cały czas jakby przyklejony do obiektywu kamery?
Proszę o jakieś rady jak tego dokonać, bądź w jaki sposób umieścić na ekranie nieruchomy element? |
|
DejaVu |
» 2012-02-19 12:52:09 Przesuwasz obiekt razem z kamerą. |
|
m4tx |
» 2012-02-19 14:49:18 Albo po prostu rysujesz bitmapę na środku ekranu, również za pomocą OpenGL-a. |
|
Mrusio Temat założony przez niniejszego użytkownika |
» 2012-02-19 21:22:25 przesuwanie obiektu z kamerą wydaje mi się nie najlepszym rozwiązaniem, zresztą do tego dochodzi jeszcze jego obracanie razem z kamerą. Napotykam tutaj problemy typu, że obiekt "wiruje" podczas ruchu kamerą... pytałem raczej o to, czy da się wykorzystać gluLookAt, a wraz z nim jakieś rzutowanie "na ekran"? Mam pewien pomysł jak to zrobić, ale coś mi nie idzie. Kombinuje w ten sposób: glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); glLoadIdentity();
gluLookAt( Kamera.x, Kamera.y, Kamera.z, Kamera.LookAtX(), Kamera.LookAtY(), Kamera.LookAtZ(), Kamera.stompx, Kamera.stompy, Kamera.stompz );
Rysuj();
if( glutGet( GLUT_WINDOW_WIDTH ) < glutGet( GLUT_WINDOW_HEIGHT ) && glutGet( GLUT_WINDOW_WIDTH ) > 0 ) glOrtho( - 2.0, 2.0, - 2.0 * glutGet( GLUT_WINDOW_HEIGHT ) / glutGet( GLUT_WINDOW_WIDTH ), 2.0 * glutGet( GLUT_WINDOW_HEIGHT ) / glutGet( GLUT_WINDOW_WIDTH ), - 2.0, 2.0 ); else glOrtho( - 2.0 * glutGet( GLUT_WINDOW_WIDTH ) / glutGet( GLUT_WINDOW_HEIGHT ), 2.0 * glutGet( GLUT_WINDOW_WIDTH ) / glutGet( GLUT_WINDOW_HEIGHT ), - 2.0, 2.0, - 2.0, 2.0 );
celownik();
czy jest coś takiego możliwe? i jeśli tak co robię źle? |
|
m4tx |
» 2012-02-20 06:55:09 Moim zdaniem rysowanie celownika przesuwając obiekt z kamerą to czysty bezsens i dokładanie sobie roboty, ale jak tam sobie chcesz :P
Hm... A z rzutowaniem perspektywicznym by nie przeszło? Wątpię, czy da się zmienić rodzaj rzutowania tylko na 1 obiekt... |
|
Mrusio Temat założony przez niniejszego użytkownika |
» 2012-02-20 08:43:24 da się, przespałem się z tym i właśnie mi się udało :)
przed gluLookAt wystarczyło dodać:
glMatrixMode( GL_PROJECTION ); glLoadIdentity(); gluPerspective( 45, ratio, 0, 1000 );
zagadka rozwiązana :) |
|
« 1 » |