使用gluPerspective()

2 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;

}
Run Code Online (Sandbox Code Playgroud)

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

gen*_*ult 6

gluPerspective(45,1.333,0,100);

切勿将zNear设置为零.它弄乱了数学:

因为r = zFar / zNear接近无穷大zNear接近0,所以zNear绝不能设置为0.

选择一些像0.01或的小正数12.

编辑:此外,将您的相机放在某处,以便它可以看到您的几何:

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;
}
Run Code Online (Sandbox Code Playgroud)

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

  • 将其设置为1的问题是,如果您的相机距离对象少于1个单位,则该对象将不会被渲染.另一方面,将zNear设置为太小的值会导致渲染伪影,因为您具有有限的精度zBuffer. (2认同)