gpt4 book ai didi

opengl - 在 GLSL 顶点着色器中使用正确的坐标系

转载 作者:行者123 更新时间:2023-12-04 16:48:42 29 4
gpt4 key购买 nike

我似乎有一个奇怪的问题。我这样设置OpenGL:

glViewport(0, 0, width, height);

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, width, height, 0, -width, width);

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

显然,宽度和高度是我的窗口的大小,即 600 x 400。在 OpenGL 内部一切都很好,我可以在正确的坐标系中移动。即平移 200 移动任何正在绘制的 200 像素。

现在,在我的顶点着色器中,我似乎无法使用相同的坐标系,我照常做:
vec4 pos  = gl_ModelViewProjectionMatrix * gl_Vertex;   
gl_Position = pos;

在 main() 里面,一切似乎都很好。但是,当我尝试这样的事情时:
vec4 pos  = gl_ModelViewProjectionMatrix * gl_Vertex;   
pos.x+= 1.0;
pos.y-= 1.0;
gl_Position = pos;

顶点位置不是在每个方向上平移 1 个像素,而是在 x 方向平移 300 像素,在 y 方向平移 200 像素。

我知道我可以在着色器中缩放这些值,但这似乎有点脏。我肯定在设置中做错了什么。任何帮助深表感谢。

最佳答案

您在转换后应用 [+1, -1] 转换。 -1 <= x <= 1, -1 <= y <= 1 对应于此转换后的视口(viewport)边缘,这就是为什么您会获得宽度/2 和高度/2 的增量。

关于opengl - 在 GLSL 顶点着色器中使用正确的坐标系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8194484/

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