5

我试图在 OpenGL 中使用四边形绘制像素完美的位图……令我惊讶的是,缺少了一行非常重要的像素:(绿色没问题,红色不好)

四边形的大小为 30x30 像素,左上角为红色 2x2。

在此处输入图像描述

  • 有人可以解释发生了什么吗?
  • OpenGL 如何决定将像素放在哪里?
  • 我应该选择哪种校正?

纹理使用 GL_NEAREST。

    glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);

我不使用 glViewport 和 glOrtho。相反,我通过制服将屏幕尺寸发送到着色器:

uniform float cw;
uniform float ch;
...
gl_Position = vec4(     -1.0f + 2.0f*(in_pos.x + in_offset.x)/cw, 
                         1.0f - 2.0f*(in_pos.y + in_offset.y)/ch,
                         0.0f, 1.0f);

但这似乎不是问题的根源,因为当我在着色器中添加 (0.5,0.5) 时(相当于第三种情况),问题就消失了......

好的,现在我意识到第三个选项也不起作用:

在此处输入图像描述

4

1 回答 1

4

检查您是否已将正确的屏幕尺寸传递给着色器。

创建窗口时,您定义了它的外部大小,但是当窗口具有标题/装饰时,放置呈现上下文的客户区可以更小。

因此,您应该使用 询问客户区大小GetClientRect(),或者在创建窗口之前通过调用找到“正确”的窗口大小AdjustWindowRect()- 这将为您提供具有您最初想要的客户区大小的窗口大小。

于 2019-11-17T19:10:58.303 回答