gpt4 book ai didi

即使使用GL_NEAREST(GL_TEXTURE_2D),OpenGL仍会尝试模糊

转载 作者:行者123 更新时间:2023-12-04 06:45:09 27 4
gpt4 key购买 nike

一个图像说一千个单词,那么两个呢?我有这种 map 艺术:

为了将其实际用作 map ,我将该纹理缩放了6倍。但是,这没有按预期进行:

所有的OpenGL代码都在我的自制2D OpenGL渲染库中,并且由于OpenGL是状态机,因此很难实际记录整个渲染过程。但是这是我的+/-(代码是Python):

width, height = window.get_size()
glViewport(0, 0, width, height)

glMatrixMode(GL_PROJECTION)
glPushMatrix()
glLoadIdentity()

glOrtho(0.0, width, height, 0.0, 0.0, 1.0)

glMatrixMode(GL_MODELVIEW)
glPushMatrix()
glLoadIdentity()

# displacement trick for exact pixelization
glTranslatef(0.375, 0.375, 0.0)

glDisable(GL_DEPTH_TEST)
glEnable(GL_BLEND)
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)

glEnable(self.texture.target) # GL_TEXTURE_2D
glBindTexture(self.texture.target, self.texture.id)

glTexParameteri(self.texture.target, GL_TEXTURE_MIN_FILTER, GL_NEAREST)
glTexParameteri(self.texture.target, GL_TEXTURE_MAG_FILTER, GL_NEAREST)

glPushMatrix()

glTranslatef(self.x, self.y, 0.0) # self.x and self.y are negative int offsets
glScalef(self.scale_x, self.scale_y, 1.0) # scale_x and scale_y are both 6

glBegin(GL_QUADS)
glTexCoord2i(0, 0)
glVertex2i(0, 0)
glTexCoord2i(0, 1)
glVertex2i(0, self.texture.height)
glTexCoord2i(1, 1)
glVertex2i(self.texture.width, self.texture.height)
glTexCoord2i(self.texture.width, 0)
glVertex2i(self.texture.width, 0)
glEnd()

glPopMatrix()
glDisable(self.texture.target)

但是,当我使用GL_TEXTURE_RECTANGLE_ARB时,不会发生此“模糊”错误。我也想使用GL_TEXTURE_2D,所以有人可以指出如何阻止这种情况发生吗?

最佳答案

如有疑问,请使用相同大小的黑白棋盘格(黑色/白色1px)替换您的纹理。它将使您对正在发生的事情有一个很好的感觉-它会变成统一的灰色(位移错误)还是会产生波浪(缩放错误)。

确保没有自动生成和使用MIP贴图。

通常,您不需要任何特殊的位移,纹理像素可以通过正确设置glOrtho来匹配像素。

另一个重要的问题-使用PowerOfTwo纹理,因为较旧的GPU可能使用各种方案来支持NPOT纹理(对用户透明缩放或填充),这可能会导致这种模糊。

要手动使用NPOT纹理,您将需要用透明像素填充它们,直到下一个POT大小为止,并按glTextCoord2f(u,v)因子缩放UV值npotSize / potSize。请注意,这与平铺不兼容,但是从您的作品来看,您不需要它。

关于即使使用GL_NEAREST(GL_TEXTURE_2D),OpenGL仍会尝试模糊,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8681904/

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