gpt4 book ai didi

c++ - 纹理不清楚的OpenGL渲染

转载 作者:行者123 更新时间:2023-11-28 06:29:54 27 4
gpt4 key购买 nike

我使用的是最新版本的 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$做的图片查看器里的样子很不一样。

发生这种情况的原因是什么以及如何规避风险?

最佳答案

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

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

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

关于c++ - 纹理不清楚的OpenGL渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27796981/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com