Procitao sam dosta tutoriala vezanih za OpenGL i pokusavam da eksperimentisem sa elementarnim primjerima. Medjutim, u dosta slucajeva imam potpuno nejasno ponasanje. Evo da krenem od slijedeceg jednostavnog primjera. Crtam jednostavan kvadrat, u z=0 ravni. Kada pokusavam da podesim kameru da gleda sa pozicije (0.0, 0.0, 1.0) na tacku (0.0, 0.0, 0.0) kvadrat je vidljiv. Kada pokusam da podesim kameru da gleda sa pozicije (0.0, 0.0, 1.1) na tacku (0.0, 0.0, 0.0), kvadrat nije vidljiv. Dakle, cim postavim polozaj kamere z>1.0 kvadrat mi vise nije vidljiv. Na osnovu dokumentacije i tutoriala, koji su jako povrsni sto se tice ovih stvari, meni ovo ponasanje nema logike. Jer, kamera u drugom slucaju ne vidi ono sto je direktno ispred nje. O cemu se radi?
Code:
void Redraw() {
glClearColor( 0.0, 0.0, 0.0, 0.0 );
glClear(GL_COLOR_BUFFER_BIT);
glMatrixMode( GL_MODELVIEW );
glLoadIdentity();
gluLookAt( 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0 ); // kvadrat se vidi
// gluLookAt( 0.0, 0.0, 1.1, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0 ); // kvadrat se ne vidi
glColor3f( 1.0, 0.0, 0.0 );
glBegin(GL_LINE_LOOP);
glVertex3f( 0.5, 0.5, 0.0 );
glVertex3f( 0.5, -0.5, 0.0 );
glVertex3f( -0.5, -0.5, 0.0 );
glVertex3f( -0.5, 0.5, 0.0 );
glEnd();
glFlush();
}
int main(int argc, char **argv) {
glutInitDisplayMode( GLUT_RGB | GLUT_SINGLE );
glutInit( &argc, argv );
glutInitWindowPosition( 200, 200 );
glutInitWindowSize( 300, 300 );
glutCreateWindow( "Test" );
glutDisplayFunc( Redraw );
glutMainLoop();
return 0;
}
void Redraw() {
glClearColor( 0.0, 0.0, 0.0, 0.0 );
glClear(GL_COLOR_BUFFER_BIT);
glMatrixMode( GL_MODELVIEW );
glLoadIdentity();
gluLookAt( 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0 ); // kvadrat se vidi
// gluLookAt( 0.0, 0.0, 1.1, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0 ); // kvadrat se ne vidi
glColor3f( 1.0, 0.0, 0.0 );
glBegin(GL_LINE_LOOP);
glVertex3f( 0.5, 0.5, 0.0 );
glVertex3f( 0.5, -0.5, 0.0 );
glVertex3f( -0.5, -0.5, 0.0 );
glVertex3f( -0.5, 0.5, 0.0 );
glEnd();
glFlush();
}
int main(int argc, char **argv) {
glutInitDisplayMode( GLUT_RGB | GLUT_SINGLE );
glutInit( &argc, argv );
glutInitWindowPosition( 200, 200 );
glutInitWindowSize( 300, 300 );
glutCreateWindow( "Test" );
glutDisplayFunc( Redraw );
glutMainLoop();
return 0;
}