我正在尝试渲染图像并使用 glTranslate 对其进行偏移:
glPushMatrix();
glTranslatef(x, y, 0.0f);
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);
glPopMatrix();
我也在使用着色器,在顶点着色器中我设置了顶点的位置:
in vec2 position;
in vec3 color;
out vec3 Color;
void main() {
Color = color;
gl_Position = vec4(position, 0.0, 1.0);
}
但是,这始终会在同一位置呈现正方形。我在想这是因为位置 vector 总是相同的。我怎样才能使用这个着色器,但仍然能够使用 glTranslate 移动图像?我怀疑我必须更改我的着色器输入,但如何更改?
最佳答案
glTranslatef 更改 MVP 矩阵,该矩阵作为统一传递到顶点着色器。使用
在 pre 150 中有一个快捷方式gl_Position = ftransform();
它将变换矩阵应用到输入位置,因为它是通过 glVertex*
传入的。
但是 glsl 150 核心不允许使用那个制服或那个函数。而是创建一个矩阵统一并将其传入:
#version 150 core
in vec2 position;
in vec3 color;
out vec3 Color;
uniform mat4 mvp;
void main() {
Color = color;
gl_Position = mvp * vec4(position, 0.0, 1.0);
}
关于c++ - Vertexshader 中的位置 vector 与 glTranslate 冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27641990/