- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
一个图像说一千个单词,那么两个呢?我有这种 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)
最佳答案
如有疑问,请使用相同大小的黑白棋盘格(黑色/白色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/
如果带有 GL_NEAREST 的 2D 纹理将返回什么值mag 和 min 过滤(和 没有 mipmapping,即只有 1 个级别)被采样 正好在 4 个纹素之间? 不幸的是,官方文档中没有任何关
我使用 MAG_FILTERING = GL_NEAREST 设置了纹理。 我不希望将其设置为 GL_LINEAR,但在我的一个着色器中,我想获取纹理的内容,就好像它是 GL_LINEAR。 我一直在
我正在使用两倍大小的纹理 (128x128) 并将它的一小部分绘制到多边形上(将其用作纹理图集)。我设置了以下内容: gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL
我是一名优秀的程序员,十分优秀!