facecam2d/src/modelpart.cpp
2021-01-11 10:46:46 +08:00

45 lines
1 KiB
C++

#include <GL/glew.h>
#include <glm/mat4x4.hpp>
#include <glm/gtc/type_ptr.hpp>
#include <graphics.hpp>
#include <modelpart.hpp>
#include <iostream>
ModelPart::ModelPart() {
}
ModelPart::ModelPart(const char* texPath, GLuint transUniformNum) {
//create vbo, ebo, vao
initBuffers(&vao);
//create texture
initTexture(&tex[0], texPath);
transUniform = transUniformNum;
empty = false;
}
void ModelPart::bindAndDraw() {
if (empty) { return; }
glBindVertexArray(vao);
glBindTexture(GL_TEXTURE_2D, tex[texSelection]);
glUniformMatrix4fv(transUniform, 1, GL_FALSE, glm::value_ptr(transMatrix));
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);
}
void ModelPart::setTransform(glm::vec2 position, float scale) {
transMatrix = glm::translate(glm::mat4(1.0f), glm::vec3(position.x, -position.y, 0.0f));
transMatrix = glm::scale(transMatrix, glm::vec3(scale, scale, scale));
}
void ModelPart::addTexture(const char* texPath, size_t slot) {
initTexture(&tex[slot], texPath);
}
void ModelPart::selectTexture(size_t slot) {
texSelection = slot;
}