基于 Ubuntu Qt的OpenGL编程----(一) 三角形
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了基于 Ubuntu Qt的OpenGL编程----(一) 三角形,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3132字,纯文字阅读大概需要5分钟。
内容图文
![基于 Ubuntu Qt的OpenGL编程----(一) 三角形](/upload/InfoBanner/zyjiaocheng/928/ed985bb0a33c43e9b370f7011488c915.jpg)
原Joey De Vries 的现代OpenGL教程链接如下
运行结果如下:
1创建第一个工程
最后的项目工程如下:
2 .qt集成了opengl相关函数的模块,我们要想使用qt只需要在.pro文件中增添opengl模块即可,如下图所示:
Qt对OpenGL的支持需要public继承QOpenGLWidget类,还要protected继承QOpenGLFunctions_3_3_Core(因为我所用opengl版本为3.3,所以继承QOpenGLFunctions_3_3_Core),然后重写这三个函数
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include<QOpenGLWidget>
#include<QOpenGLExtraFunctions>
#include<QDebug>
#include<QOpenGLShaderProgram>
#include<QOpenGLFunctions_3_3_Core>
class Triangle : public QOpenGLWidget,protected QOpenGLFunctions_3_3_Core //qt对opengl的支持,必须public继承QOpenGLWidget类,protected继承QOpenGLExtraFunctions
{
Q_OBJECT
public:
Triangle();
~Triangle();
protected:
//重写这三个函数
virtual void initializeGL();//用来初始化opengl的资源和状态
virtual void resizeGL(int w, int h);//用来设置窗口大小
virtual void paintGL();//用来绘制窗口
private:
QOpenGLShaderProgram shaderProgram;
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include<QMessageBox>
static unsigned int VAO,VBO,EBO;
Triangle::Triangle()
{
}
Triangle::~Triangle()
{
glDeleteVertexArrays(1,&VAO);
glDeleteBuffers(1,&VBO);
}
void Triangle::initializeGL()
{
this->initializeOpenGLFunctions();//初始化qt opengl部分
bool success = shaderProgram.addShaderFromSourceFile(QOpenGLShader::Vertex,":/triangles.vert");//加载定点着色器
if(!success)
{
QMessageBox::critical(this,"error","顶点着色器triangle.vert加载失败");
}
success = shaderProgram.addShaderFromSourceFile(QOpenGLShader::Fragment,":/triangles.frag");//加载片段着色器
if(!success)
{
QMessageBox::critical(this,"error","片段着色器triangle.frag加载失败");
}
success = shaderProgram.link();//把着色器链接到程序上
if(!success)
{
QMessageBox::critical(this,"error","着色器连接诶失败");
}
float vertices[]={ //坐标数组
-0.5f,-0.5f,0.0f, //左边顶点
0.5f,-0.5f,0.0f, //右边顶点
0.0f,0.5f,0.0f //上边顶点
};
glGenVertexArrays(1,&VAO);//生成一个顶点数组对象
glGenBuffers(1,&VBO);//生成一个顶点缓冲对象
glBindVertexArray(VAO);//通过VAO绑定VBO的顶点数据
glBindBuffer(GL_ARRAY_BUFFER,VBO);//把新建的VBO缓冲绑定到GL_ARRAY_BUFFER目标上
glBufferData(GL_ARRAY_BUFFER,sizeof(vertices),vertices,GL_STATIC_DRAW);//把之前定义的顶点数据复制到缓冲的内存中
glVertexAttribPointer(0,3,GL_FLOAT,GL_FALSE,3*sizeof(GL_FLOAT),(void*)0);//告诉opengl如何解析顶点数据
glEnableVertexAttribArray(0);//启用顶点属性0
glBindBuffer(GL_ARRAY_BUFFER,0);//取消VBO的绑定
glBindVertexArray(0);//取消VAO的绑定
}
void Triangle::resizeGL(int w, int h)
{
glViewport(0,0,w,h);//控制渲染窗口的大小
}
void Triangle::paintGL()
{
glClearColor(0.2f,0.3f,0.3f,1.0f);
glClear(GL_COLOR_BUFFER_BIT);
shaderProgram.bind();
glBindVertexArray(VAO);
glDrawArrays(GL_TRIANGLES,0,3);
shaderProgram.release();
}
main.cpp
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Triangle w;
w.show();
return a.exec();
}
triangles.vert
#version 330 core
layout(location = 0)in vec3 aPos;
void main()
{
gl_Position = vec4(aPos.x,aPos.y,aPos.z,1.0f);
}
triangles.frag
#version 330 core
out vec4 FragColor;
void main()
{
FragColor = vec4(1.0f,0.0f,0.2f,1.0f);
}
内容总结
以上是互联网集市为您收集整理的基于 Ubuntu Qt的OpenGL编程----(一) 三角形全部内容,希望文章能够帮你解决基于 Ubuntu Qt的OpenGL编程----(一) 三角形所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。