在[上一篇文章](http://davidsheh.github.io/post/「Modern OpenGL系列(二)」创建OpenGL窗口/)中已经介绍了OpenGL窗口的创建。本文接着说如何用OpenGL绘制一个三角形。
1 . 添加头文件mesh.h
,代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| #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(); virtual ~Mesh();
protected: private: Mesh(const Mesh& other); void operator=(const Mesh& other);
enum { POSITION_VB, NUM_BUFFERS };
GLuint m_vertexArrayObject; GLuint m_vertexArrayBuffers[NUM_BUFFERS]; unsigned int m_drawCount; };
|
2 . 添加类mesh.cpp
,代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| #include "mesh.h"
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); glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
glBindVertexArray(0); }
Mesh::~Mesh() { glDeleteVertexArrays(1, &m_vertexArrayObject); }
void Mesh::Draw() { glBindVertexArray(m_vertexArrayObject); glDrawArrays(GL_TRIANGLES, 0, m_drawCount);
glBindVertexArray(0); }
|
3 . 修改主类main.cpp
,代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| #include <GL\glew.h> #include "display.h" #include "mesh.h"
int main(int argc, char** argv) { Display display(400, 300, "hello world!");
Vertex vertices[] = { Vertex(glm::vec3(-0.5, -0.5, 0)), Vertex(glm::vec3(0, 0.5, 0)), Vertex(glm::vec3(0.5, -0.5, 0)), };
Mesh mesh(vertices, sizeof(vertices) / sizeof(vertices[0]));
while (!display.IsClosed()) { display.Clear(0.0f, 1.0f, 0.0f, 1.0f);
mesh.Draw();
display.Update(); }
return 0; }
|
本文整理自YouTube视频教程#3.5 Intro to Modern OpenGL Tutorial: Meshes
同系列文章
[「Modern OpenGL系列(一)」十步搞定OpenGL开发环境](http://davidsheh.github.io/post/「Modern OpenGL系列(一)」十步搞定OpenGL开发环境/)
[「Modern OpenGL系列(二)」创建OpenGL窗口](http://davidsheh.github.io/post/「Modern OpenGL系列(二)」创建OpenGL窗口/)
[「Modern OpenGL系列(三)」用OpenGL绘制一个三角形](http://davidsheh.github.io/post/「Modern OpenGL系列(三)」用OpenGL绘制一个三角形/)
[「Modern OpenGL系列(四)」在OpenGL中使用Shader](http://davidsheh.github.io/post/「Modern OpenGL系列(四)」在OpenGL中使用Shader/)