我正在学习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如何工作我将不胜感激。
答案 0 :(得分:6)
gluPerspective(45,1.333, 0 ,100);
永远不要将zNear设置为零。它弄乱了the math:
由于
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;
}
默认情况下,它从位置(0,0,0)向下看-Z轴。