【发布时间】:2015-01-07 00:44:00
【问题描述】:
我使用的是最新版本的 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$制作的图片查看器中的外观有很大的不同。
发生这种情况的原因以及如何避免风险?
【问题讨论】:
-
最新版本还在使用直接渲染?
-
我想你所说的“不清楚”是指“模糊”。如果是这样,那是因为OpenGL做了双线性插值。如果您不希望发生插值,请使用 GL_NEAREST 而不是 GL_LINEAR。但是,除非您将纹素与像素对齐,否则您的纹理很可能看起来很丑。
-
@ratchetfreak idk,我以前就是这样编码的
-
@Tibo 这是唯一的解决方案吗?
-
您还必须发布一些图像:上传到 GPU 之前的外观和渲染后的外观,因为许多用户只需要这 2 个图像来识别您的问题;)