首页 > 代码库 > Qt4.3.4下面创建一个OpenGL 窗口
Qt4.3.4下面创建一个OpenGL 窗口
直接上代码:
NeHeWidget.h
#include <QtOpenGL/qgl.h> class NeHeWidget:public QGLWidget { Q_OBJECT public: 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(); }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。