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

[OpenGL] rzutowanie

Ostatnio zmodyfikowano 2012-02-20 08:43
Autor Wiadomość
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?
P-50965
DejaVu
» 2012-02-19 12:52:09
Przesuwasz obiekt razem z kamerą.
P-50968
m4tx
» 2012-02-19 14:49:18
Albo po prostu rysujesz bitmapę na środku ekranu, również za pomocą OpenGL-a.
P-50983
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:
C/C++
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); // Clear Color and Depth Buffers
glLoadIdentity(); // Reset transformations

// Set the camera
gluLookAt( Kamera.x, Kamera.y, Kamera.z, // wpółrzędne położenia obserwatora
Kamera.LookAtX(), Kamera.LookAtY(), Kamera.LookAtZ(), // współrzędne punktu w którego kierunku jest zwrócony obserwator,
Kamera.stompx, Kamera.stompy, Kamera.stompz );


///////
Rysuj(); // -> rysowanie całej sceny
/////


///tutaj chciałbym zmienić rodzaj rzutowania


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(); //i narysować celownik w prosty sposób
czy jest coś takiego możliwe? i jeśli tak co robię źle?
P-51048
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...
P-51080
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ć:
C/C++
glMatrixMode( GL_PROJECTION );
glLoadIdentity();
gluPerspective( 45, ratio, 0, 1000 );

zagadka rozwiązana :)
P-51087
« 1 »
  Strona 1 z 1