【Game Engine】第一节:搭建VS2019+QT5.14环境&&第一个openGL程序
作者:互联网
序言
参考youtube教程:Game Engine Development
视频教程中为vs2012+qt4,本文改动将会注明
准备环境
- 下载QT5.14,安装MSVC2017,进入安装目录 \Qt5.14.1\5.14.1\msvc2017 (下称QT目录)
- 安装Visual Studio 2019 (或2017)
- 下载glew,安装目录 \glew-2.1.0 (下称GLEW目录)
环境目录
- myGameEngine
- eingine
- sandbox
- Middleware
- glew
- bin
- lib
- include
- QT
- bin
- lib
- include
- glew
环境配置
- 将QT目录下的include内容拷贝到QT\include
- 将QT目录下的lib目录中拷贝Qt5Cored.lib Qt5OpenGLd.lib Qt5Widgetsd.lib 到 QT\lib
- 将QT目录下的bin目录中对应Qt5Cored.dll Qt5OpenGLd.dll Qt5Widgetsd.dll 到 QT\bin
- 将GLEW目录下的include目录内容拷贝到glew\include
- 将GLEW目录下的lib目录中glew32.lib拷贝到glew\lib
- 将GLEW目录下的bin目录中glew32.dll拷贝到glew\bin
项目配置
- 配置sandbox中的包含库目录 附加依赖目录 为对应目录
- 加入lib文件到附加依赖项 注:另外加入OpenGL32.lib 否则LINK报错
程序编写
测试环境
//sandbox.cpp
#include <QtWidgets/qapplication.h>
int main(int argc, char* argv[]) {
QApplication Application(argc, argv);
return Application.exec();
}
- 注意: 编译成功运行时会提示缺少dll文件,暂时将所缺少的dll拷贝到debug目录中。
创建QtWidget
//sandbox.cpp
#include <QtWidgets/qapplication.h>
#include <QtWidgets/qwidget.h>
int main(int argc, char* argv[]) {
QApplication Application(argc, argv);
qWidget myGlWidget;
myGlWidget.show();
return Application.exec();
}
创建OpenGlWidget
//MyGlWindow.h
#ifndef SANDBOX_MY_GL_WINDOW
#define SANDBOX_MY_GL_WINDOW
#include <QtOpenGL/qgl.h>
class MyGlWindow : public QGLWidget
{
};
#endif
- 教程中qt4为qglwidget.h
//sandbox.cpp
#include <QtWidgets/qapplication.h>
#include <QtWidgets/qwidget.h>
#include "MyGlWindow.h"
int main(int argc, char* argv[]) {
QApplication Application(argc, argv);
MyGlWindow myGlWidget;
myGlWidget.show();
return Application.exec();
}
绘制简单三角形
//MyGlWindow.h
#ifndef SANDBOX_MY_GL_WINDOW
#define SANDBOX_MY_GL_WINDOW
#include <QtOpenGL/qgl.h>
class MyGlWindow : public QGLWidget
{
protected:
void initializeGL();
void paintGL();
};
#endif
//MyGlWindow.cpp
#include <GL/glew.h>
#include <cassert>
#include "MyGlWindow.h"
void MyGlWindow::initializeGL() {
GLenum errorCode = glewInit();
assert(errorCode == 0);
GLuint myBufferID;
glGenBuffers(1, &myBufferID);
glBindBuffer(GL_ARRAY_BUFFER, myBufferID);
float verts[] = {
+0.0f,+1.0f,
-1.0f,-1.0f,
+1.0f,-1.0f,
};
glBufferData(GL_ARRAY_BUFFER, sizeof verts, verts,
GL_STATIC_DRAW);
}
void MyGlWindow::paintGL() {
glClear(GL_COLOR_BUFFER_BIT);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, 0);
glDrawArrays(GL_TRIANGLES, 0, 3);
}
OpenGL代码解释
- 绘制图形过程:
- 生成buffer
- 将buffer绑定到ARRAY_BUFFER
- 将数据导入到Buffer
- enableVertexAttribArray:允许数据通过pipeline到达gpu,赋予index
- glVertexAttribPointer:将通过的数据格式化为每一个顶点
(index,size,type,normalized,stride,*pointer)
size:每一个顶点所拥有的属性数量 此时为二位坐标
type:每一个属性的数据类型 - 绘制三角形
最终效果
peter_819 发布了28 篇原创文章 · 获赞 6 · 访问量 1万+ 私信 关注标签:Engine,QT5.14,QT,lib,VS2019,MyGlWindow,GL,include,目录 来源: https://blog.csdn.net/peter_819/article/details/104174661