Qt OpenGL 基础程序框架
mywidget.cpp
/*initializeGL 初始化OpenGL环境
* 1.设置清屏颜色
* 2.启用深度缓存
* 3.启用纹理
*/
void MyWidget::initializeGL()
{
/*载入纹理*/
loadGLTextures();
glEnable( GL_TEXTURE_2D );
glShadeModel( GL_SMOOTH );
glClearColor( 0.0, 0.0, 0.0, 0.0 );
/*下面这三行必须做的是关于depth buffer(深度缓存)的。*/
glClearDepth( 1.0 );//深度缓存
glEnable( GL_DEPTH_TEST );//启用深度测试
glDepthFunc( GL_LEQUAL );//深度测试类型
glHint( GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST );//真正精细的透视修正。
}
/*完成OpenGL每帧的绘制
* 1.清除颜色和深度缓存
* 2.重置模型视图矩阵
* 3.绘制图形
*/
void MyWidget::paintGL()
{
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glLoadIdentity();
glBegin( GL_QUADS );
glVertex3f( -1.0, -1.0, 1.0 );
glVertex3f( 1.0, -1.0, 1.0 );
glVertex3f( 1.0, 1.0, 1.0 );
glVertex3f( -1.0, 1.0, 1.0 );
glEnd();
}
/*窗口更新时候调用
* 1.设置视口
* 2.设置投影矩阵
* 3.设置观察矩阵
*/
void MyWidget::resizeGL(int width, int height)
{
if ( 0 == height )
{
height = 1;//防止height为0。
}
glViewport( 0, 0, (GLint)width, (GLint)height );//重置当前的视口
glMatrixMode( GL_PROJECTION );//设置投影矩阵
glLoadIdentity();//重置投影矩阵
gluPerspective( 45.0, (GLfloat)width/(GLfloat)height, 0.1, 100.0 );//建立透视矩阵
glMatrixMode( GL_MODELVIEW );//选择模型观察矩阵
glLoadIdentity();//重置模型观察矩阵
}