使用gluPerspective()

时间:2011-10-25 23:38:30

标签: c++ opengl 3d sdl

我正在学习OpenGL;我设法制作了我的第一个2D节目,但我坚持使用gluPerspective。

我正在尝试进行一些测试,试图掌握如何制作3D项目,但我似乎无法弄清楚我缺少什么以及需要做些什么来进行这项小测试:

void init_perspective()

{

SDL_Init(SDL_INIT_EVERYTHING); 
SDL_SetVideoMode(640, 480, 32, SDL_OPENGL); 
SDL_WM_SetCaption( "OpenGL Test", NULL ); 

glClearColor( 0, 0, 0, 0 ); 
glMatrixMode( GL_PROJECTION );
glLoadIdentity();
gluPerspective(45, 1.333, 0, 100); 
glMatrixMode( GL_MODELVIEW );
glLoadIdentity();
glClear( GL_COLOR_BUFFER_BIT );

}

int main( int argc, char **argv)

{

init_perspective();

glTranslatef( 200, 200, 50 );
glColor4f(1.0,1.0,1.0,1.0);

glBegin(GL_QUADS);

    glVertex3f(0, 0 ,0);
    glVertex3f(50,0 ,10);
    glVertex3f(50,50,30);
    glVertex3f(0, 50,0);

glEnd();

glLoadIdentity();

SDL_GL_SwapBuffers();

SDL_Delay(1000);

SDL_Quit();

return 0;

}

如果有人能告诉我我可以使用哪些函数调用并且在此测试代码中缺失,那么我可以玩游戏并了解3D OpenGL如何工作我将不胜感激。

1 个答案:

答案 0 :(得分:6)

  

gluPerspective(45,1.333, 0 ,100);

永远不要将zNear设置为零。它弄乱了the math

  

由于r = zFar / zNear接近无穷大,zNear接近0,zNear绝不能设为0。

选择一些小的正数,例如0.0112

编辑:此外,将相机放在某处可以看到几何图形:

int main( int argc, char **argv)
{
init_perspective();

glTranslatef(0,0,-5);
glColor4f(1.0,1.0,1.0,1.0);

glBegin(GL_QUADS);
    glVertex2f(-1,-1);
    glVertex2f( 1,-1);
    glVertex2f( 1, 1);
    glVertex2f(-1, 1);
glEnd();

SDL_GL_SwapBuffers();

SDL_Delay(1000);

SDL_Quit();

return 0;
}

默认情况下,它从位置(0,0,0)向下看-Z轴。