gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 01:50:17 26 4
gpt4 key购买 nike

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com