PDA

View Full Version : N00b help - specifically viewing, transformations



ankitmcgill
10-20-2008, 09:02 PM
Hi all,

Before i post my question i should mention that i am a complete n00b to opengl or any 3d graphics package for that matter. So things might not be obvious to me ...

i am trying to follow up the 'red book' and as im going on i try to code small programs to make sure i get the concepts. ive pasted the code for my program below .. what its supposed to do i think is show a train of parallel lines as viewed from a top perspective view. The window im using is 800x400.

However when i run the program all i get is a blank screen. Im hoping someone can help me with this ... its driving me nuts !




glClearColor(0.0,0.0,0.0,0.0); //window clear color
glClear(GL_COLOR_BUFFER_BIT); //clear the 'color buffer'

glTranslatef(0,5,-5.0); //move the viewers eye +5(y) and -5(z)

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustum(-1.0,1.0,-1.0,1.0,1.5,20); //define the viewing volume
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glViewport(0,0,800,400); //map the viewport onto the window 800x400

glBegin(GL_POINTS);
glVertex3f(0,0,0);
glVertex3f(0,0,1.5);
glEnd();

int i=0;
glBegin(GL_LINES);
for(i=1;i<=16;i++)
{
glVertex3f(5*i/100,.5,1.5);
glVertex3f(5*i/100,.5,10);
}
glEnd();
glFlush();


Thank you for all the help

_NK47
10-21-2008, 07:26 AM
are you using double-buffers and you swapping them?
you need that so the buffer you draw inside gets visible on the monitor.
check redbook for buffers and SwapBuffer or wglSwapBuffers().

ps. code above looks alright, but needs to be in the right place.

trinitrotoluene
10-21-2008, 07:38 AM
glTranslatef(0,5,-5.0); //move the viewers eye +5(y) and -5(z): This transformation call is not effective because later you call glLoadIdentity(); in modelview matrix mode which erase the matrix at the top of the matrix stack with the identity matrix. So change the order like this:



glClearColor(0.0,0.0,0.0,0.0); //window clear color
glClear(GL_COLOR_BUFFER_BIT); //clear the 'color buffer'

//The following code normally go in a reshape function not in a //drawing function
glViewport(0,0,800,400);
//map the viewport onto the window 800x400
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustum(-1.0,1.0,-1.0,1.0,1.5,20); //define the viewing volume
//End of code in reshape function

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(0,5,-5.0); //move the viewers eye +5(y) and -5(z)
//Or try glTranslatef(0.,0.0,-5.0);
glColor3f(1.0,1.0,1.0);
glBegin(GL_POINTS);
glVertex3f(0,0,0);
glVertex3f(0,0,1.5);
glEnd();

int i=0;
glBegin(GL_LINES);
for(i=1;i<=16;i++)
{
glVertex3f(5*i/100,.5,1.5);
glVertex3f(5*i/100,.5,10);
}
glEnd();
//glFlush(); //Don't call this function
//If you use double buffer then call
glutSwapBuffers() for glut