【Game Engine】第一节:搭建VS2019+QT5.14环境&&第一个openGL程序

序言

参考youtube教程:Game Engine Development
视频教程中为vs2012+qt4,本文改动将会注明

准备环境

  1. 下载QT5.14,安装MSVC2017,进入安装目录 \Qt5.14.1\5.14.1\msvc2017 (下称QT目录
  2. 安装Visual Studio 2019 (或2017)
  3. 下载glew,安装目录 \glew-2.1.0 (下称GLEW目录

环境目录

  • myGameEngine
    • eingine
    • sandbox
    • Middleware
      • glew
        • bin
        • lib
        • include
      • QT
        • bin
        • lib
        • include

环境配置

  1. QT目录下的include内容拷贝到QT\include
  2. QT目录下的lib目录中拷贝Qt5Cored.lib Qt5OpenGLd.lib Qt5Widgetsd.lib 到 QT\lib
  3. QT目录下的bin目录中对应Qt5Cored.dll Qt5OpenGLd.dll Qt5Widgetsd.dll 到 QT\bin
  4. GLEW目录下的include目录内容拷贝到glew\include
  5. GLEW目录下的lib目录中glew32.lib拷贝到glew\lib
  6. GLEW目录下的bin目录中glew32.dll拷贝到glew\bin

项目配置

  1. 配置sandbox中的包含库目录 附加依赖目录 为对应目录
  2. 加入lib文件到附加依赖项 注:另外加入OpenGL32.lib 否则LINK报错

程序编写

测试环境

//sandbox.cpp
#include 

int main(int argc, char* argv[]) {
	QApplication Application(argc, argv);
	return Application.exec();
}
  • 注意: 编译成功运行时会提示缺少dll文件,暂时将所缺少的dll拷贝到debug目录中。

创建QtWidget

//sandbox.cpp
#include 
#include 

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 

class MyGlWindow : public QGLWidget
{
};

#endif
  • 教程中qt4为qglwidget.h
//sandbox.cpp
#include 
#include 
#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 

class MyGlWindow : public QGLWidget
{
protected:
	void initializeGL();
	void paintGL();
};

#endif
//MyGlWindow.cpp
#include 
#include 
#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代码解释

  • 绘制图形过程:
  1. 生成buffer
  2. 将buffer绑定到ARRAY_BUFFER
  3. 将数据导入到Buffer
  4. enableVertexAttribArray:允许数据通过pipeline到达gpu,赋予index
  5. glVertexAttribPointer:将通过的数据格式化为每一个顶点
    (index,size,type,normalized,stride,*pointer)
    size:每一个顶点所拥有的属性数量 此时为二位坐标
    type:每一个属性的数据类型
  6. 绘制三角形

最终效果

你可能感兴趣的:(引擎开发,opengl)