一般来说,我想找出opengl函数在这段代码中的作用,例如glOrtho();.
我一直在搜索,试图详细了解它们的意思和做法,但我很难找到代码的任何好解释.SDL代码我很好.
我也想知道是否有人能为我描述gltranslatef();
bool init_GL()
{
glClearColor( 0, 0, 0, 0 );
//Set projection
glMatrixMode( GL_PROJECTION );
glLoadIdentity();
glOrtho( 0, SCREEN_WIDTH, SCREEN_HEIGHT, 0, -1, 1 );
//Initialize modelview matrix
glMatrixMode( GL_MODELVIEW );
glLoadIdentity();
//If there was any errors
if( glGetError() != GL_NO_ERROR )
return false;
return true;
}
bool init()
{
if( SDL_Init( SDL_INIT_EVERYTHING ) < 0 )
return false;
//Create Window
if( SDL_SetVideoMode( SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP, SDL_OPENGL ) == NULL )
return false;
//Initialize OpenGL
if( init_GL() == false )
return false;
//Set caption
SDL_WM_SetCaption( "OpenGL Test", NULL );
return true;
}
Run Code Online (Sandbox Code Playgroud)
这段代码来自lazyfoo教程,但它没有描述很多代码.
非常感谢任何可以提供帮助的人.
我会为你分解一下:
bool init_GL()
{
Run Code Online (Sandbox Code Playgroud)
我的意思是这个函数init_GL是坏的风格.它所做的一切,实际上都属于绘图功能
glClearColor( 0, 0, 0, 0 );
Run Code Online (Sandbox Code Playgroud)
glClearColor设置在使用GL_COLOR_BUFFER_BIT设置调用glClear时帧缓冲区将填充(清除)的颜色.
//Set projection
glMatrixMode( GL_PROJECTION );
Run Code Online (Sandbox Code Playgroud)
glMatrixMode切换OpenGL矩阵操作函数生效的矩阵.OpenGL知道矩阵"投影","模型视图","纹理"和"颜色".最后两个很少被触及.
glLoadIdentity();
Run Code Online (Sandbox Code Playgroud)
Load Identity将在矩阵堆栈中的当前位置上放置一个单位矩阵.与向量相乘的单位矩阵将产生完全相同的向量.
glOrtho( 0, SCREEN_WIDTH, SCREEN_HEIGHT, 0, -1, 1 );
Run Code Online (Sandbox Code Playgroud)
glOrtho将单位矩阵与正交投影矩阵相乘.一些投影,如正交或仿射透视可以通过线性变换来描述.线性变换可以用矩阵表示.在某种程度上,你可能会认为投影矩阵是OpenGL相机的"镜头"(虽然OpenGL中没有相机!).
//Initialize modelview matrix
glMatrixMode( GL_MODELVIEW );
glLoadIdentity();
Run Code Online (Sandbox Code Playgroud)
这里矩阵模式切换到Modelview矩阵.Modelview矩阵用于在世界中放置对象(模型)并相对于"相机"移动世界(-view,因此为modelview).
//If there was any errors
if( glGetError() != GL_NO_ERROR )
{
return false;
}
Run Code Online (Sandbox Code Playgroud)
此错误检查代码是错误的.在OpenGL中,您需要在循环中调用glGetError,直到它返回GL_NO_ERROR.
return true;
}
bool init()
{
if( SDL_Init( SDL_INIT_EVERYTHING ) < 0 )
{
return false;
}
Run Code Online (Sandbox Code Playgroud)
初始化SDL库,因此可以使用它.
//Create Window
if( SDL_SetVideoMode( SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP, SDL_OPENGL ) == NULL )
{
return false;
}
Run Code Online (Sandbox Code Playgroud)
SDL_SetVideoMode创建一个窗口(如果在窗口图形系统中,如果在裸帧缓冲区上操作,它将像名称所示,设置视频模式),可能将视频模式更改为另一个显示分辨率(如果在全屏模式下),并创建一个OpenGL上下文.
//Initialize OpenGL
if( init_GL() == false )
{
return false;
}
//Set caption
SDL_WM_SetCaption( "OpenGL Test", NULL );
Run Code Online (Sandbox Code Playgroud)
最后,这将设置窗口标题.
return true;
}
Run Code Online (Sandbox Code Playgroud)
到目前为止没有任何东西被渲染 此程序也没有事件循环,因此窗口只会在屏幕上闪烁,消失并且程序终止.
| 归档时间: |
|
| 查看次数: |
393 次 |
| 最近记录: |