Я пытаюсь повернуть квад в трехмерном пространстве.Следующий код показывает вершинный шейдер, используемый для рисования квадрата:
#version 330 core
layout (location = 0) in vec3 aPos;
layout (location = 1) in vec3 aColor;
out vec3 ourColor;
uniform mat4 transform;
uniform mat4 model;
uniform mat4 view;
uniform mat4 projection;
void main()
{
gl_Position = transform*(projection*view*model*vec4(aPos, 1.0f));
ourColor = aColor;
}
Квадрат отображается, когда transform
не умножено на projection*view*model*vec4(aPos,1.0f)
, но не отображается, когда оно умножено, как указано выше.Код для трансформации:
trans=glm::rotate(trans,(float)(glfwGetTime()),glm::vec3(0.0,0.0,1.0));
float scaleAmount = sin(j*0.3);j=j+0.035;
trans=glm::scale(trans,glm::vec3(scaleAmount,scaleAmount,scaleAmount));
unsigned int transformLoc = glGetUniformLocation(shaderProgram, "transform");
glUniformMatrix4fv(transformLoc, 1, GL_FALSE, glm::value_ptr(trans));
glBindVertexArray(VAO);
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);
Я также установил униформу, присутствующую в вершинном шейдере.Почему он не вращается, не масштабируется и даже не появляется, когда я умножаю transform
на (projection*view*model*vec4(aPos,1.0f))
? Редактировать: Я выяснил, что проблема в масштабировании, поскольку код работает только с вращением.Код не работает только с масштабированием.