#include "Hexagon.h"
#include <glad/glad.h>
#include <iostream>
Hexagon::Hexagon() : VAO(0), VBO(0) {}
Hexagon::~Hexagon() {
if (VAO) glDeleteVertexArrays(1, &VAO);
if (VBO) glDeleteBuffers(1, &VBO);
}
void Hexagon::initData() {
HexVertex vertices[6] = {
{ glm::vec3(0.0f, 0.8f, 0.0f), glm::vec3(1.0f, 0.0f, 0.0f) },
{ glm::vec3(0.5f, 0.4f, 0.0f), glm::vec3(0.0f, 1.0f, 0.0f) },
{ glm::vec3(0.5f, -0.4f, 0.0f), glm::vec3(0.0f, 0.0f, 1.0f) },
{ glm::vec3(0.0f, -0.8f, 0.0f), glm::vec3(1.0f, 1.0f, 0.0f) },
{ glm::vec3(-0.5f, -0.4f, 0.0f), glm::vec3(0.0f, 1.0f, 1.0f) },
{ glm::vec3(-0.5f, 0.4f, 0.0f), glm::vec3(1.0f, 0.0f, 1.0f) }
};
glGenVertexArrays(1, &VAO);
glGenBuffers(1, &VBO);
glBindVertexArray(VAO);
glBindBuffer(GL_ARRAY_BUFFER, VBO);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(HexVertex), (void*)0);
glEnableVertexAttribArray(1);
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, sizeof(HexVertex),
(void*)offsetof(HexVertex, color));
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindVertexArray(0);
}
void Hexagon::renderObject() {
glBindVertexArray(VAO);
glDrawArrays(GL_TRIANGLE_FAN, 0, 6);
glBindVertexArray(0);
}
void Hexagon::updateDataBuffer() {
HexVertex newColors[2] = {
{ glm::vec3(), glm::vec3(1.0f, 1.0f, 1.0f) },
{ glm::vec3(), glm::vec3(0.5f, 0.5f, 0.5f) }
};
glBindBuffer(GL_ARRAY_BUFFER, VBO);
glBufferSubData(GL_ARRAY_BUFFER, sizeof(HexVertex) * 2, sizeof(newColors), newColors);
glBindBuffer(GL_ARRAY_BUFFER, 0);
}
解释每一行代码,每一行都要解释
最新发布