QT中第一个OpenGL程序

11 篇文章 0 订阅

   

学习QT已经有一段时间了,为了可以进一步的学习QT,并学习在QT在使用OpenGL。将定期按照NeheOpenGL教程,将功能在QT中全部实现。本博客发布的代码,在Window XP + Visual 2005 SP1 + QT 4.6.0编译通过。非常感谢Nehe对于本人学习OpenGL的帮助。

需要在QT中创建OpenGL应用程序,通常需要从QGLWidget类继承出自己的类。QGLWidgetQWidget派生,提供了在QT应用程序中显示OpenGL图形的能力。QGLWidget累提供了三个虚函数来完成OpenGL的绘图任务。initializeGL()完成OpenGL环境的初始化,paintGL()绘制OpenGL图形,resizeGL()在窗口发生改变时运行。以下代码利用此方法,在窗口中显示一个简单的山角形和五角星。

main.cpp

 

 

wglwidget.h

 

 

wglwidget.cpp

 

 

程序中,利用QTranslator安装翻译文件,为了可以讲QMessageBox弹出对话框中的YesNo翻译为中文,至于具体做法,可参照本博客其他文章。本程序运行结果如下:

(图片上传功能暂时关闭,稍微补充)

1.1 第一个OpenGL程序

 

 第一个OpenGL程序

 

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
要在Qt使用OpenGL 3.3或更高版本来渲染一个OBJ文件,您需要完成以下步骤: 1. 在Qt创建一个OpenGL窗口: ```c++ class GLWidget : public QOpenGLWidget { public: GLWidget(QWidget *parent = 0); ~GLWidget(); protected: void initializeGL() override; void paintGL() override; void resizeGL(int w, int h) override; }; ``` 2. 在initializeGL函数初始化OpenGL环境,并编译和链接您的着色器程序: ```c++ void GLWidget::initializeGL() { initializeOpenGLFunctions(); // Create and compile your shader program QOpenGLShaderProgram* shaderProgram = new QOpenGLShaderProgram(this); shaderProgram->addShaderFromSourceFile(QOpenGLShader::Vertex, "vertexShader.glsl"); shaderProgram->addShaderFromSourceFile(QOpenGLShader::Fragment, "fragmentShader.glsl"); shaderProgram->link(); shaderProgram->bind(); } ``` 3. 在paintGL函数使用您的着色器程序和OBJ文件的数据绘制场景: ```c++ void GLWidget::paintGL() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Set up your shader uniforms and attributes shaderProgram->setUniformValue("projection", projection); shaderProgram->setUniformValue("view", view); shaderProgram->setUniformValue("model", model); shaderProgram->setAttributeArray("position", vertices.constData(), 3, sizeof(Vertex)); shaderProgram->setAttributeArray("normal", normals.constData(), 3, sizeof(Vertex)); shaderProgram->setAttributeArray("texCoord", texCoords.constData(), 2, sizeof(Vertex)); shaderProgram->enableAttributeArray("position"); shaderProgram->enableAttributeArray("normal"); shaderProgram->enableAttributeArray("texCoord"); // Draw your OBJ file glDrawArrays(GL_TRIANGLES, 0, vertices.size()); shaderProgram->disableAttributeArray("position"); shaderProgram->disableAttributeArray("normal"); shaderProgram->disableAttributeArray("texCoord"); } ``` 4. 在resizeGL函数更新OpenGL视口: ```c++ void GLWidget::resizeGL(int w, int h) { glViewport(0, 0, w, h); } ``` 5. 确保您的OBJ文件包含顶点位置、法线和纹理坐标数据,并且您可以正确地解析和加载它们。 这只是一个基本的框架,您需要根据您的项目需求进行修改和扩展。您可以使用第三方库,如Assimp,来加载和解析OBJ文件的数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值