加载纹理时,我已经在其中包含以下行:
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
但是当我在渲染过程中在此处缩放图像时:
glTexCoord2d(0.0,0.0);
glTexCoord2d(0.0454,0.0);
glTexCoord2d(0.0454,1.0);
glTexCoord2d(1.0,1.0);
我对纹理的过滤真的很糟糕(纹理是带有多个帧的Spritesheet,我不想为每个帧制作一个单独的文件)。
最佳答案
就纹理过滤而言,您做得对。但是,仅仅避免所有采样伪影是不够的,尤其是在移动精灵时。您还必须确保:
为了说明问题,假设您有一个32x32的sprite(在纹理中),并将其映射到屏幕上的43x43像素的四边形。然后,GPU仅具有32个像素,以填充43个像素的宽度,因此它需要复制一些像素。精确复制哪些纹理像素取决于屏幕上四边形的坐标(如果使用非整数坐标)。因此,当GPU决定复制不同的纹理像素以填充四边形时,运动的精灵似乎会出现奇怪的闪烁颜色。
为避免此问题并获得最佳外观的精灵,您确实希望每个纹理像素映射到单个屏幕像素。如果执行此操作,则不再使用
GL_NEAREST
或GL_LINEAR
,因为每个像素将仅使用单个纹理像素的颜色。