|
[ medi @ 15.01.2009. 21:27 ] @
| 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;
} |
[ reject @ 16.01.2009. 11:42 ] @
Pazi ovako, postoji nearClipping plane i farClipping plane, to
su dve ravni ispred kamere, gde je nearClipping plane odmah
ispred kamere i govori od koje 'daljine od kamere' se stvari
crtaju, farClipping govori do koje 'daljine od kamere' se stvari
crtaju i sve sto upadne izmedju te dve ravni biva nacrtano,
a ostalo ne. To inace sluzi da se pri crtanju odmah otpisu stvari
koje se "ne vide" pa dobijes na brzini.
Ne znam kako glut "podesi kameru", nikad glut nisam koristio,
ali je moguce da ti tvoj nacrtani kvadrat kad se priblizis, bude
'pre' nearClipping ravni pa se ne crta.
Uzmi ubaci da kameru po z-osi mrdas sa tasterima, pa vidi kad
se to desava kad se priblizavas i kad se odaljavas od kvadrata.
Takodje, vidi da near jos priblizis pa vidi dal' ce da nestaje.
vidi http://www.gamedev.net/reference/articles/article1680.asp
Code:
int main(int argc, char **argv)
{
glutInit(&argc,argv); //initializes the GLUT framework
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH); //sets up the display mode
glutCreateWindow("My first GLUT program"); //creates a window
glutDisplayFunc(redraw); //specifies our redraw function
glMatrixMode(GL_PROJECTION); //changes the current matrix to the projection matrix
//sets up the projection matrix for a perspective transform
gluPerspective(45, //view angle
1.0, //aspect ratio
10.0, //near clip
200.0); //far clip
glMatrixMode(GL_MODELVIEW); //changes the current matrix to the modelview matrix
glutMainLoop(); //the main loop of the GLUT framework
return 0;
}
[ medi @ 17.01.2009. 12:09 ] @
Postavio sam temu i na OpenGL forum. Dobio sam odgovor da je to 'vjerovatno' zato sto je objekat van clipping prostora, i da je podrazumijevana transformacija projekcije obicno glOrtho2d(-1.0, 1.0, -1.0, 1.0), mada se u to ne treba uzdati jer nije definisano specifikacijom, i da je uvijek potrebno definisati svoju projekciju. Meni je to bilo razumljivo objasnjenje, jer je u slucaju kad mi je kamera na poziciji (0.0, 0.0, 1.1) kvadrat van clipping prostora (near=-1, far=1).
Medjutim, to objasnjenje mi je djelovalo prihvatljivo dok nisam poceo da eksperimentisem oko ortografske projekcije, gdje mi je sve objasnjeno izgubilo smisao. Pomjerio sam kameru malo unazad, na poziciju (0.0, 0.0, 1.5), kvadrat je i dalje u Z=0 ravni, i pokusao da podesim ortografsku projekciju tj. clipping prostor. Kakve god vrijednosti koristio za near i far, nisam uspio da prikazem kvadrat. Moje shvatanje je bilo da su near i far udaljenosti clipping ravni od kamere, mjereci u smijeru prema kojem kamera gleda. Slijedeci primjer me je nacinio totalno zbunjenim, jer za novi polozaj kamere nisam uspio da prikazem kvadrat ni sa jednim podesavanjem ortografske projekcije:
Code:
void Redraw() {
glClearColor( 0.0, 0.0, 0.0, 0.0 );
glClear(GL_COLOR_BUFFER_BIT);
// VIEW TRANSFORMATION
glMatrixMode( GL_MODELVIEW );
glLoadIdentity();
gluLookAt( 0.0, 0.0, 1.5, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0 ); // camera point moved to z=1.5 position
// MODEL TRANSFORMATION
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();
// PROJECTION TRANSFORMATION - none of these below work
glMatrixMode( GL_PROJECTION );
glLoadIdentity();
glOrtho( -1.0, 1.0, -1.0, 1.0, -5.0, 5.0);
// glOrtho( -1.0, 1.0, -1.0, 1.0, 0.0, 5.0);
// glOrtho( -1.0, 1.0, -1.0, 1.0, -5.0, 0.0);
// glOrtho( -1.0, 1.0, -1.0, 1.0, 5.0, -5.0);
// etc.
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;
}
[ StefanJer91 @ 18.01.2009. 23:05 ] @
Koliko znam, ortogonalna projekcija je samo za 2d, tako da ne treba uopste da koristis f-ju gluLookAt. Da bi simulirao kameru za 2d, potrebno je da ovako pozivas glOrtho(-w+x, w+x, -h+y, h+y, -1, 1), gde su x i y pozicija kamere. Dakle resenje je da ne koristis gluLookAt i da ortogonalnu projekciju podesis pre crtanja.
[ medi @ 21.01.2009. 22:20 ] @
Hm, ortogonalna projekcija se takodje koristi za 3D prikaz. Ja koliko znam, u 3D modeling i 3D animation alatima, koisti se ortogonalna projekcija. Sve zavisi od primjene.
Dobio sam odgovor na OpenGL forumu. Transformaciju projekcije je potrebnu uraditi prije iscrtavanja primitiva, tada sve radi kako sam i pretpostavio.
[ reject @ 21.01.2009. 23:39 ] @
Citat: medi: Transformaciju projekcije je potrebnu uraditi prije iscrtavanja primitiva
To se podrazumeva. Vidi:
http://www.falloutsoftware.com/tutorials/gl/gl5.htm
http://www.gamedev.net/reference/articles/article415.asp
i
http://www.ecere.com/3dbhole/3d_transformations.html
Ovaj zadnji sajt ( http://www.ecere.com/3dbhole/) mi je mnogo pomogao kad sam pisao softverski render za matori winCE.
[ maestr00 @ 17.03.2009. 08:56 ] @
E posto sam ovdje totalni laik, jeli moze jedan savjet u vezi tog programiranja. Sta mi preporucujete kao pocetniku. Kako da krenem? Unapred zahvaljujem!!!
[ vpoqol5 @ 12.04.2009. 11:52 ] @
http://nehe.gamedev.net/
Mislim da ćeš tamo pronaći sve što ti treba za početak sa OpenGL-om a i dalje
Lp
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|