the*_*man 2 c c++ opengl scaling pixel
我在加载纹理时已经有了这些行:
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
Run Code Online (Sandbox Code Playgroud)
但是当我在渲染过程中缩放图像时:
glTexCoord2d(0.0,0.0);
glTexCoord2d(0.0454,0.0);
glTexCoord2d(0.0454,1.0);
glTexCoord2d(1.0,1.0);
Run Code Online (Sandbox Code Playgroud)
我对纹理的过滤非常糟糕(纹理是一个有多个框架的spritesheet,我宁愿不为每个框架制作单独的文件).
你在纹理过滤方面做得很好.但是,它不足以避免所有采样伪像,特别是如果你移动你的精灵.您还必须确保:
为了说明这个问题,假设您有一个32x32精灵(在纹理中)并将其映射到屏幕上的43x43像素四边形.然后GPU只有32个纹素来填充43像素的宽度,因此它需要复制一些纹素.究竟哪些纹素复制将取决于屏幕上四边形的坐标(如果使用非整数坐标).因此,当GPU决定复制不同的纹素以填充四边形时,移动的精灵似乎会出现奇怪的闪烁颜色.
为了避免这个问题并获得最好看的精灵,你真的希望每个纹素都映射到一个屏幕上的像素.如果你这样做,那么使用GL_NEAREST或GL_LINEAR不再重要,因为每个像素只使用单个纹素的颜色.