使用OpenGL绘制图形
上篇记录了配置opengl编程环境以及创建绘制图形的窗口,本篇记录如何在创建的窗口绘制图形,首先要了解渲染管道的机制,如下:
渲染管道图解
这里创建了一个新的Mesh.h头文件以及一个Mesh.cpp文件
Mesh.h
#pragma once
#include <glm/glm.hpp>
#include <GL/glew.h>
class Vertex
{
public:
Vertex(const glm::vec3& pos)
{
this->pos = pos;
}
protected:
private:
glm::vec3 pos;
};
class Mesh
{
public:
Mesh(Vertex* vertices, unsigned int numVertices);
void Draw();
Mesh();
protected:
private:
enum
{
POSITION,
NUM_BUFFERS
};
GLuint m_vertxeArrayObject;
GLuint m_vertexArrayBuffers[NUM_BUFFERS];
unsigned int m_drawCount;
};
Mesh.cpp
#include "Mesh.h"
Mesh::Mesh(Vertex* vertices, unsigned int numVertices)
{
m_drawCount = numVertices;
glGenVertexArrays(1,&m_vertxeArrayObject);
glBindVertexArray(m_vertxeArrayObject);
glGenBuffers(NUM_BUFFERS,m_vertexArrayBuffers);
glBindBuffer(GL_ARRAY_BUFFER, m_vertexArrayBuffers[POSITION]);
glBufferData(GL_ARRAY_BUFFER,numVertices*sizeof(vertices[0]),vertices,GL_STATIC_DRAW);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0,3,GL_FLOAT,GL_FALSE,0,0);
glBindVertexArray(0);
}
Mesh::Mesh()
{
glDeleteVertexArrays(1, &m_vertxeArrayObject);
}
void Mesh::Draw()
{
glBindVertexArray(m_vertxeArrayObject);
glDrawArrays(GL_TRIANGLES,0,m_drawCount);
glBindVertexArray(0);
}
运行效果:
以上代码都是学习获取自虚幻大学官方教程,复制粘贴的同时也要跟着思维去理解哦,共勉