gpt4 book ai didi

ios - OpenGL 2D 游戏纹理工件

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:08:51 25 4
gpt4 key购买 nike

我正在为 iOS 绘制一个像素完美的游戏:

enter image description here

问题是每隔几帧我就会看到正在绘制的另一种纹理的随机片段(在黑色中漂浮的蓝绿色点)。首先,我试着确保四边形完全对齐。接下来,我更改了 Z 缓冲区的大小。这些事情似乎都没有帮助。

我正在使用纹理图集,但不幸的是我无法添加填充像素(我见过的一种解决方案)。现在,如果我将纹理坐标从 0,1 更改为 0.005,0.95,问题就会消失,但它看起来像垃圾。

此屏幕截图的行为是否暗示了我尚未绑定(bind)的另一个解决方案?请注意,对于 sprite 艺术,我的过滤模式必须保持 NEAREST,当我强制我的角色/相机以整个像素增量移动时(不幸的是感觉不如以子像素移动好),问题就消失了。

编辑:我还尝试通过像这样计算我的 uv 来对纹素的“中间”而不是边界进行采样:

u = (pixelCoordX + 0.5) / pixelsInTexture
v = (pixelCoordY + 0.5) / pixelsInTexture

但现在一切看起来都破灭了。

编辑:即使我不知道如何解决这个问题,我也想了解为什么它会出现在分数像素坐标而不是整个像素坐标中。游戏没有缩放,它只是平移,所以无论我如何偏移带纹理的图 block ,它看起来都是相同的宽度——点亮相同数量的像素——而不是执行这种奇怪的环绕。

编辑:在阅读纹素采样的工作原理后,我有点理解为什么我所有四边形的非整数位置会影响纹理……但我找不到明确的文档说 OpenGL 是“允许的”使用在我的绘制调用中指定范围之外的 uv 坐标(远小于 [0,1],因为我使用的是纹理图集)。

最佳答案

手动制作纹理图集很难做到正确!我遇到了同样的问题。如果您的纹理图集中的所有纹理都是正方形,这可能会有所帮助:

纹理图集上的坐标从 0.0-.1.0f 运行。我在思考 0.0-0.9999f 时取得了更多成功

在我的例子中,我在 256x256 像素的纹理中使用了 16x16 像素的正方形,这给了我 16 行和列。 1/16 = 0.0625。第一个纹理坐标将从 0.0 开始,并在下一个纹理开始之前结束,因此:0.0624。纹理二从 0.0625 开始,到 0.1249 结束,依此类推。这样做会从下一个纹理中移除那些小 Blob 。

Visual Aid

我的纹理映射看起来像:

//texture 1
{{0.0624f, 0.9376f},
{0.0624f, 0.9999f},
{0.0f, 0.9999f},
{0.0f, 0.9376f}},

//texture 2
{{0.1249f, 0.9376f},
{0.1249f, 0.9999f},
{0.0625f, 0.9999f},
{0.0625f, 0.9376f}}

此外,请确保您正在使用:

glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST );

关于ios - OpenGL 2D 游戏纹理工件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18818555/

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