直接上代码:
NeHeWidget.h
#include <QtOpenGL/qgl.h>class NeHeWidget:public QGLWidget
{
Q_OBJECTpublic:
NeHeWidget( QWidget* parent=0 );
~NeHeWidget();protected:
void initializeGL();
void paintGL();
void resizeGL(int width,int height);};
NeHeWidget.cpp
#include "NeHeWidget.h"NeHeWidget::NeHeWidget( QWidget* parent )
:QGLWidget( parent )
{
setGeometry( 50,50,640,480 );
setWindowTitle( "OpenGL Framework" );//setCaption( "OpenGL Framework" );
}NeHeWidget::~NeHeWidget()
{}void NeHeWidget::initializeGL()
{
glShadeModel( GL_SMOOTH ); //启用阴影平滑
glClearColor( 0.0,0.0,0.0,0.0 ); //设置清除屏幕所使用的颜色
glClearDepth( 1.0 ); //设置深度缓存
glEnable( GL_DEPTH_TEST ); //启用深度测试
glDepthFunc( GL_LEQUAL ); //所作深度测试的类型
glHint( GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST );
//进行最好的透视修正
}//任何你想在屏幕上显示的东东都将在此段代码中出现。
//此函数包括了所有的绘图代码。//如果你了解OpenGL,可以在glLoadIdentity()调用之后,函数返回之前
//,试着添加一些OpenGL代码来创建基本的图形void NeHeWidget::paintGL()
{
//将屏幕清除城我们前面所决定的颜色,清除深度缓存并重置场景
glClear( GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT );
//清除屏幕和深度缓存
glLoadIdentity();
//重置当前的模型观察矩阵}
void NeHeWidget::resizeGL( int width,int height )
{
if( height==0 )
{
height=1; //防止height=0;
}glViewport( 0,0,(GLint)width,(GLint)height ); //重置当前视口(Viewport)
glMatrixMode( GL_PROJECTION ); //选择投影矩阵
glLoadIdentity(); //重置投影矩阵//glPerspective( 45.0,(GLfloat)width/(GLfloat)height,0.1,100.0 ); //建立透视投影矩阵
gluPerspective( 45.0, (GLfloat)width/(GLfloat)height, 0.1, 100.0 );//glMatrixModel( GL_MODELVIEW ); //选择模型观察矩阵
glMatrixMode( GL_MODELVIEW );
glLoadIdentity(); //重置模型观察矩阵}
main.cpp
#include <QApplication>
#include "NeHeWidget.h"int main( int argc,int argv[] )
{
bool fs=true;
QApplication app( argc,(char**)&argv[0] );
NeHeWidget w(0);
//app.setMainWidget(&w); //Qt 3.x支持setMainWidget,但是Qt4已经取消了对setMainWidget的支持。
w.show();
return app.exec();
}
Qt4.3.4下面创建一个OpenGL 窗口