Srodne teme
Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

OpenGL: Jednostavni primjeri, nejasno ponasanje ...

[es] :: 3D programiranje :: OpenGL: Jednostavni primjeri, nejasno ponasanje ...

[ Pregleda: 2923 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

medi
Banja Luka

Član broj: 10638
Poruke: 35
62.68.98.*



Profil

icon OpenGL: Jednostavni primjeri, nejasno ponasanje ...15.01.2009. u 21:27 - pre 185 meseci
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;
}
 
Odgovor na temu

reject
Ivan Pesic
Bgd

Član broj: 7659
Poruke: 2209
*.ptt.rs.

Sajt: misc.comli.com


Profil

icon Re: OpenGL: Jednostavni primjeri, nejasno ponasanje ...16.01.2009. u 11:42 - pre 185 meseci
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;
    }

Mass murder ain’t just painless,
Now we’ve made it cute.


The Church Of The Holy Transistor
 
Odgovor na temu

medi
Banja Luka

Član broj: 10638
Poruke: 35
62.68.103.*



Profil

icon Re: OpenGL: Jednostavni primjeri, nejasno ponasanje ...17.01.2009. u 12:09 - pre 185 meseci
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;
}
 
Odgovor na temu

StefanJer91
Stefan Jeremic
Beograd

Član broj: 121923
Poruke: 160
*.static.ikomline.net.



Profil

icon Re: OpenGL: Jednostavni primjeri, nejasno ponasanje ...18.01.2009. u 23:05 - pre 185 meseci
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.
The earth teaches us more about ourselves than all the books. Because it resists us. Man discovers himself when he measures himself against the obstacle.
 
Odgovor na temu

medi
Banja Luka

Član broj: 10638
Poruke: 35
62.68.103.*



Profil

icon Re: OpenGL: Jednostavni primjeri, nejasno ponasanje ...21.01.2009. u 22:20 - pre 185 meseci
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.

 
Odgovor na temu

reject
Ivan Pesic
Bgd

Član broj: 7659
Poruke: 2209
82.208.235.*

Sajt: misc.comli.com


Profil

icon Re: OpenGL: Jednostavni primjeri, nejasno ponasanje ...21.01.2009. u 23:39 - pre 185 meseci
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.
Mass murder ain’t just painless,
Now we’ve made it cute.


The Church Of The Holy Transistor
 
Odgovor na temu

maestr00
NE RADIM

Član broj: 214855
Poruke: 1
80.65.75.*



Profil

icon Re: OpenGL: Jednostavni primjeri, nejasno ponasanje ...17.03.2009. u 08:56 - pre 183 meseci
E posto sam ovdje totalni laik, jeli moze jedan savjet u vezi tog programiranja. Sta mi preporucujete kao pocetniku. Kako da krenem? Unapred zahvaljujem!!!
 
Odgovor na temu

vpoqol5

Član broj: 216722
Poruke: 10
*.adsl.net.t-com.hr.



Profil

icon Re: OpenGL: Jednostavni primjeri, nejasno ponasanje ...12.04.2009. u 11:52 - pre 183 meseci
http://nehe.gamedev.net/
Mislim da ćeš tamo pronaći sve što ti treba za početak sa OpenGL-om a i dalje

Lp
 
Odgovor na temu

[es] :: 3D programiranje :: OpenGL: Jednostavni primjeri, nejasno ponasanje ...

[ Pregleda: 2923 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.