我的用户中有一小部分(<1%)的用户正在使用我的游戏的OpenGL UI遇到奇怪的失真.看来我的像素完美投影设置:
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);
Run Code Online (Sandbox Code Playgroud)
导致他们的系统出现问题.我一直没有成功收集有关他们系统的细节,但我相信他们可以成功运行类似的OpenGL游戏.所以我相信我的代码有问题.
这是一个视觉文物的图片:
这是一张没有视觉伪像的图片(忽略操作系统的差异):
虽然我的游戏将最终渲染比例缩放为2倍,但它glSubTexImage2D
在执行1x渲染后通过单次调用完成.这意味着第一个屏幕截图中的工件在像素加倍之前出现(因此为什么工件也像素加倍).因此像素倍增本身不能成为问题的根源.
有什么可能导致这种情况的想法吗?我目前无法测试.绝大多数用户(包括我自己)都没有遇到过视觉瑕疵.
编辑(4月30日):波兰用户告诉我他/她的视频体验这些文物并且是"nVidia 9500 GS".不确定这是否意味着9500M GS或9500 GT,但两者看起来都相当现代.
有90%的可能性,遇到此问题的用户在其nVidia控制面板中的某些非默认值上具有纹理质量切换.在你的情况下,GL_NEAREST应该有助于避免这样的问题(因此它不会平均放大图像的邻居纹素).但首先,要求他将nVidia控制面板设置设置为默认值以证明或破坏理论.