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

标签 opengl png textures image-loading

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

alt text http://img685.imageshack.us/img685/9130/upload2.png

alt text 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);

显示代码
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);

编辑:我不认为我在拉伸(stretch)每个像素在坐标系中应该是两个
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);

最佳答案

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

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

关于opengl - 加载到纹理上时 png 图像模糊,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2724145/

相关文章:

html - PNG 图像未在 iPhone 上显示

html - 更改使用 css + png 构建的按钮的状态

c++ - 使用着色器渲染时 OpenGL 纹理全黑

c++ - Qt + OpenGL:如何正确覆盖 QOpenGLWidget::resizeEvent?

opengl - 如何用opengl画螺旋线

html - 为html制作一个颜色可变的图像?

XNA .Fbx 纹理

c++ - CopyResource 从一个 D3D11 设备到另一个

c++ - 使用 GL_ARRAY_BUFFER 更新顶点数据

opengl - 一个OpenGL程序如何与不同的显卡接口(interface)