Cześć, postanowiłem się trochę pobawić OpenGL'em i zrobiłem taki kod:
#include "Figure.h"
Figure::Figure(std::vector<GLfloat> &points)
{
glGenBuffers(1, &vbo); //zapisanie 1 bufora do zmiennej
glBindBuffer(GL_ARRAY_BUFFER, vbo); //pokazujemy cel bufora, w tym przypadku bufor jest tablicą danych
glBufferData(GL_ARRAY_BUFFER, sizeof(GLfloat) * points.size(), points.data(), GL_STATIC_DRAW); //podajemy cel, rozmiar tablicy, wskaźnik na tablicę, przewidywane zastosowanie tych danych
glGenVertexArrays(1, &vao); //zwraca indeks tablicy wierzchołków
glBindVertexArray(vao); //Uaktywnia tablicę
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, nullptr); //definiuje cechy figury(id, ile wymiarów, typ)
glEnableVertexAttribArray(0); //uaktywnia id
this->points = points.size() / 3;
}
Figure::~Figure()
{
}
void Figure::draw()
{
glBindVertexArray(vao);
glDrawArrays(GL_TRIANGLES, 0, points);
}
void Figure::setPosition(const glm::vec3 &position)
{
this->position = position;
}
void Figure::setRotation(const glm::vec3 &rotation)
{
this->rotation = rotation;
}
void Figure::setScale(const glm::vec3 &scale)
{
this->scale = scale;
}
void Figure::sendTransforms()
{
transformPosition = glm::translate(glm::mat4(1.0f), position);
transformRot = glm::rotate(transformPosition, rotation.x, glm::vec3(1, 0, 0));
transformRot = glm::rotate(transformRot, rotation.y, glm::vec3(0, 1, 0));
transformRot = glm::rotate(transformRot, rotation.z, glm::vec3(0, 0, 1));
transformScale = glm::scale(transformRot, scale);
glUniformMatrix4fv(MainShader::transformUniform, 1, GL_FALSE, glm::value_ptr(transformScale));
}
I chciałbym się dowiedzieć, dlaczego jeżeli nie użyję sendTransforms(), to nie rysuje mi obiektu?
Kod shadera wygląda tak:
#version 330
layout(location = 0) in vec3 position;
uniform mat4 transMatrix;
uniform mat4 viewMatrix;
uniform mat4 perspectiveMatrix;
void main()
{
gl_Position = perspectiveMatrix * viewMatrix * transMatrix * vec4(position, 1.0);
}