OpenGL学习(二)

使用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);
}

运行效果:
在这里插入图片描述
以上代码都是学习获取自虚幻大学官方教程,复制粘贴的同时也要跟着思维去理解哦,共勉

猜你喜欢

转载自blog.csdn.net/weixin_43541308/article/details/121405487