【发布时间】:2018-05-09 19:14:55
【问题描述】:
我正在尝试在 3D 空间中旋转四边形。以下代码显示了用于绘制四边形的顶点着色器:
#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)) 相乘时它不旋转和缩放,甚至不出现?
编辑:我发现问题在于缩放,因为代码仅适用于旋转。该代码不适用于仅缩放。
【问题讨论】:
-
试试
gl_Position = projection * view * transform * model * vec4(aPos,1.0f) -
@Ripi2 不起作用。
-
你了解“转换”吗?如果没有,请查看this。
-
@Rabbid76 第一条评论。另外,我发现问题与缩放有关。
-
我明白了!我将
j变量初始化为整数。因此,对于缩放功能,j=j+0.035始终为 0。因此,四边形没有出现。抱歉给您带来了麻烦,感谢您的帮助。
标签: c++ opengl transformation glm-math