如何使用OPENGL分配顶点缓存对象,并绘制一个白色的三角形
添加Mesh类:
class Vertex
{
public:
Vertex(const glm::vec3& pos)
{
this->pos=pos;
}
protected:
private:
glm::vec3 pos;
};
定义mesh类
class Mesh
{
public:
Mesh(Vertex* vertices,unsigned int num);
protected:
private:
GLuint m_vertexArrayObject;
GLuint m_vertexArrayBuffer[NUM_BUFFERS];
}
实现Mesh类
Mesh::Mesh(Vertex* vertices,unsigned int numVertices)
{
m_drawCount=numVertices;
glGenVertexArrays(1,&m_vertexArrayObject);
glBindVertexArray(m_vertexArrayObject);
//创建顶点缓存对象名称
glGenBuffers(NUM_BUFFERS,m_vertexArrayBuffers);
//
glBindBuffer(GL_ARRAY_BUFFER,m_vertexArrayBuffers[POSITION_VB]);
glBufferData(GL_ARRAY_BUFFER,numVertices*sizeof(vertices[0])/vertices,GL_STATIC_DRAW);
glEnableVertexAttribArray(0);
glVertexArrayPointer(0,3,GL_FLOAT,GL_FALSE,0,0);
glBindVertexArray(0);
}
实现Mesh的析构函数
Mesh::~Mesh()
{
glDeleteVertexArray(1,&m_vertexArrayObject);
}
添加Draw函数实现绘制
void Mesh::Draw()
{
glBindVertexArray(m_vertexArrayObject);
glDrawArrays(GL_TRIANGLES,0,m_drawCount);
glBindVertexArray(0);
}
在main.cpp中
vertex vertices[]={Vertex(glm::vec3(-0.5,-0.5,0)),
Vertex(glm::vec(0,0.5,0)),
Vertex(glm::vec(0.5,-0.5,0))};
Mesh mesh(vertices,sizeof(vertices)/sizeof(vertices[0]));
然后调用mesh.Draw()就实现白色三角形的绘制.