加载到纹理上时 png 图像模糊

Chr*_*ris 5 opengl png textures image-loading

我在 photoshop 中创建了一个 png 图像,其中包含我已加载到 OpenGL 程序中的透明胶片。我已将它绑定到纹理,在程序中图片看起来很模糊,我不知道为什么。

替代文字 http://img685.imageshack.us/img685/9130/upload2.png

替代文字 http://img695.imageshack.us/img695/2424/upload1e.png

加载代码

// Texture loading object
nv::Image title;

// Return true on success
if(title.loadImageFromFile("test.png"))
{
    glGenTextures(1, &titleTex);
    glBindTexture(GL_TEXTURE_2D, titleTex);
    glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE);
    glTexImage2D(GL_TEXTURE_2D, 0, title.getInternalFormat(), title.getWidth(), title.getHeight(), 0, title.getFormat(), title.getType(), title.getLevel(0));
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, 16.0f);
}

else
    MessageBox(NULL, "Failed to load texture", "End of the world", MB_OK | MB_ICONINFORMATION);
Run Code Online (Sandbox Code Playgroud)

显示代码

glEnable(GL_TEXTURE_2D);    
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glBindTexture(GL_TEXTURE_2D, titleTex);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
glTranslatef(-800, 0, 0.0);
glColor3f(1,1,1);

glBegin(GL_QUADS);
    glTexCoord2f(0.0, 0.0); glVertex2f(0,0);
    glTexCoord2f(0.0, 1.0); glVertex2f(0,600);
    glTexCoord2f(1.0, 1.0); glVertex2f(1600,600);
    glTexCoord2f(1.0, 0.0); glVertex2f(1600,0);
glEnd();
glDisable(GL_BLEND);    
glDisable(GL_TEXTURE_2D);
Run Code Online (Sandbox Code Playgroud)

编辑:我不认为我在拉伸坐标系中的每个像素应该是两个

int width=800, height=600;
int left = -400-(width-400);
int right = 400+(width-400);
int top = 400+(height-400);
int bottom = -400-(height-400);
gluOrtho2D(left,right,bottom,top);
Run Code Online (Sandbox Code Playgroud)

Jer*_*fin 4

OpenGL(通常)要求纹理本身的大小为 2 的幂,因此(可能)发生的情况是,您的纹理被缩放到尺寸为 2 的幂的大小,然后又缩放回原始尺寸——在缩放两次的过程中,你会失去一些质量。

显然,您只想显示位图而不进行任何缩放,而不将其包装到另一个对象的表面或类似的东西(即任何纹理的用途)。既然如此,我只是将其显示为位图,而不是纹理(例如参见glRasterPos2iglBitmap)。