Mam taki problem że nie mogę wykonać obrotu ani żadnej operacji na macierzy w shaderze
Jeśli przekażę zmienna zmiana to wszystko działa popawnie.
Namtomiast przy próbie wykonania poniższego kodu, czyli przekazania macierzy, wyświetla się czarny ekran.
Co zrobiłem żle?
glm::vec3 wierzcholek1 = glm::vec3(-0.5f, -0.5f, 0.0f);
glm::vec3 wierzcholek2 = glm::vec3(0.5f, -0.5f, 0.0f);
glm::vec3 wierzcholek3 = glm::vec3(0.0f, 0.5f, 0.0f);
void ZmienneUniform::wyswietl()
{
glClear(GL_COLOR_BUFFER_BIT);
mat4 obrot;
obrot = rotate(obrot, 90.0f, vec3(1.0, 0.0, 0.0));
static GLfloat zmiana = 0.0f;
//glUniform1f(zmianaShader, zmiana);
glUniformMatrix4fv(zmiennaObrotu, 1, GL_FALSE, glm::value_ptr(obrot));
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, VBO);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
glDrawArrays(GL_TRIANGLES, 0, 3);
glDisableVertexAttribArray(0);
glutSwapBuffers();
}
zmiennaObrotu = glGetUniformLocation(programZShaderami, "obrot90");
if (zmianaShader == -1)
{
std::cerr << "Nie znalezion zmiennej uniform." << std::endl;
system("pause");
exit(1);
}
char * vertexShader =
" #version 120 \n \
attribute vec3 polozenie; \
uniform float zmiana; \
uniform mat4 obrot90; \
void main() \
{ \
gl_Position = obrot90 * vec4(polozenie.x, polozenie.y, polozenie.z, 1.0f); \
}";