9

在我的游戏的 OpenGL UI 中,我的一小部分用户 (<1%) 遇到了奇怪的失真。看来我的像素完美投影设置:

glViewport(0, 0, clientSizeWidth, clientSizeHeight);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, clientSizeWidth, clientSizeHeight, 0, -1.0, 1.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
double transAmount = 0.375;
glTranslated(transAmount, transAmount, 0.0);

导致他们的系统出现问题。我一直未能成功收集有关他们系统的详细信息,但我相信他们可以成功运行类似的 OpenGL 游戏。所以我相信我的代码有问题。

这是视觉伪影的图片:

视觉伪影

这是一张没有视觉伪影的图片(忽略操作系统的差异):

没有视觉伪影

尽管我的游戏将最终渲染缩放为 2x,但它是通过glSubTexImage2D在执行 1x 渲染之后的一次调用来实现的。这意味着第一个屏幕截图中的伪影在像素加倍之前存在(因此伪影也是像素加倍的原因)。所以像素加倍本身不可能是问题的根源。

关于可能导致这种情况的任何想法?我目前没有办法测试。绝大多数用户(包括我自己)没有体验到视觉伪影。

编辑(4 月 30 日):一位波兰用户告诉我他/她的视频卡遇到了这些伪影,并且是“nVidia 9500 GS”。不确定这是否意味着9500M GS9500 GT,但两者看起来都相当现代。

4

1 回答 1

6

有 90% 的可能性是,遇到此问题的用户在其 nVidia 控制面板中的某个非默认值上有纹理质量开关。在您的情况下, GL_NEAREST 应该有助于避免此类问题(因此它不会平均放大图像的相邻纹素)。但首先,请他将 nVidia 控制面板设置设置为默认值,以证明或打破理论。

于 2013-07-03T16:48:42.177 回答