c++ - Vertexshader 中的位置 vector 与 glTranslate 冲突

标签 c++ opengl shader

我正在尝试渲染图像并使用 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/

相关文章:

c++ - 卸载注入(inject)的 DLL 时,FreeLibraryAndExitThread 使程序崩溃

c++ - 套接字在处理后打开,打开它完成

c# - gl.end() 之后的 gl.begin() -> 渲染为黑色

android - 在 Android 应用程序中存储着色器代码的位置

opengl - 每片段光照坐标系

c++ - 如何在数组或 vector 中使用不同的 functoid

c++ - 在 C++ OpenGL 程序中找出显卡驱动程序的名称

algorithm - 在二维 View 上选择几何对象

c++ - '2D' 相机在 OpenGL/C++ 中的移动

python - python 中的 glCreateProgram().uniform