我正在使用最新版本的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 $制作的图像浏览器中的外观完全不同。
导致这种情况发生的原因以及如何避免风险?
答案 0 :(得分:1)
检查图像的尺寸。大多数图像加载器都期望图像以2的幂呈现。因此,8x8像素图像应该看起来清晰(而不是伸展或乱码)。尝试将图像剪切为32x32或128x128等,看看是否有帮助。如果您想要的图像无法在高度=宽度处表示,您仍然可以调整画布,使其类似于128x128,然后只需使用UV坐标来获取纹理所需的图像部分。
另外,我认为如果你禁用双线性过滤,任何模糊都应该注意: glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
请注意,这不是一个明确的答案 - 我没有足够的代表发表评论......