gpt4 book ai didi

c++ - OpenGL Sprite 半像素位置偏移

转载 作者:行者123 更新时间:2023-11-28 00:23:17 25 4
gpt4 key购买 nike

最近我注意到,即使我创建的纹理的宽度和高度以像素为单位,没有小数部分,它们看起来还是有点模糊。经过几个小时的调试,我发现问题出在偏移量上。如果我提供没有小数部分的偏移量,我会得到: enter image description here

但是如果我用小数部分添加偏移量,我得到: enter image description here

请以完整尺寸查看这些图片,否则您不会注意到问题:)

我有这种设置纹理的方法:

bool WindowsGraphicsManager::setTexture(
UINT32& id, UINT8* image, UINT32 width, UINT32 height,
bool wrapURepeat, bool wrapVRepeat, bool useMipmaps, int textureType)
{
glGenTextures(1, &id);
bindTexture(id);
int type = GL_RGBA;
if (textureType == Texture::MONO) {
type = GL_ALPHA;
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
}
glTexImage2D(
GL_TEXTURE_2D, 0, type,
width, height, 0, type,
GL_UNSIGNED_BYTE, image);
int minFilter = GL_LINEAR;
if (useMipmaps) {
glGenerateMipmap(GL_TEXTURE_2D);
minFilter = GL_LINEAR_MIPMAP_LINEAR;
}
glTexParameteri(GL_TEXTURE_2D,
GL_TEXTURE_MIN_FILTER, minFilter);
glTexParameteri(GL_TEXTURE_2D,
GL_TEXTURE_MAG_FILTER, GL_LINEAR);
int wrap_u = wrapURepeat ?
GL_REPEAT : GL_CLAMP_TO_EDGE;
int wrap_v = wrapVRepeat ?
GL_REPEAT : GL_CLAMP_TO_EDGE;
glTexParameteri(GL_TEXTURE_2D,
GL_TEXTURE_WRAP_S, wrap_u);
glTexParameteri(GL_TEXTURE_2D,
GL_TEXTURE_WRAP_T, wrap_v);
return !checkGLError("Loading texture.");
}

我知道会有一点点模糊,但这看起来太多了而且太明显了。我能做些什么来解决这个问题,或者至少我应该在哪里寻找问题?着色器?矩阵?模型?质地?渲染设置?

最佳答案

这与您的实际质地无关。只要确保在渲染之前将坐标四舍五入即可。您在这里看到的(连同看起来很奇怪的拉伸(stretch))是舍入误差。

关于c++ - OpenGL Sprite 半像素位置偏移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26376389/

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