OpenGL渲染与纹理不清楚

时间:2015-01-06 10:46:35

标签: c++ opengl

我正在使用最新版本的OpenGL。但是当我使用以下函数创建纹理时,用C ++编写:

GLuint Texture::Generate2dTexture(int width, int height, char* data, int length)
{
   GLuint textureIndex;

   glGenTextures(1, &textureIndex);
   glBindTexture(GL_TEXTURE_2D, textureIndex);
   gluBuild2DMipmaps(GL_TEXTURE_2D, 3, width, height, GL_BGR_EXT, GL_UNSIGNED_BYTE, data);
   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
   return textureIndex;
}

并使用:

渲染
void Renderer::DrawRectangle(GLuint textureID, RECTD rect)
{
    glBindTexture(GL_TEXTURE_2D, textureID);
    glBegin(GL_QUADS);
    {
        glTexCoord2f(0.0f, 1.0f);
        glVertex2d(rect.left, rect.top);
        glTexCoord2f(0.0f, 0.0f);
        glVertex2d(rect.left, rect.bottom);
        glTexCoord2f(1.0f, 0.0f);
        glVertex2d(rect.right, rect.bottom);
        glTexCoord2f(1.0f, 1.0f);
        glVertex2d(rect.right, rect.top);
    }
    glEnd();
}

渲染后看起来不清楚。它看起来与M $制作的图像浏览器中的外观完全不同。

导致这种情况发生的原因以及如何避免风险?

1 个答案:

答案 0 :(得分:1)

检查图像的尺寸。大多数图像加载器都期望图像以2的幂呈现。因此,8x8像素图像应该看起来清晰(而不是伸展或乱码)。尝试将图像剪切为32x32或128x128等,看看是否有帮助。如果您想要的图像无法在高度=宽度处表示,您仍然可以调整画布,使其类似于128x128,然后只需使用UV坐标来获取纹理所需的图像部分。

另外,我认为如果你禁用双线性过滤,任何模糊都应该注意: glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);

请注意,这不是一个明确的答案 - 我没有足够的代表发表评论......