LibGdx纹理绘制为#getTextureData给出的反转

时间:2016-01-31 03:58:17

标签: java opengl libgdx textures

我一直试图解决这个问题,我一直在我的libgdx桌面程序上正确显示纹理。

我有一台正交相机,当我设置为:

camera.setOrtho(false);

我得到这张图片: enter image description here

当我将其设置为:

camera.setOrtho(true);

我得到这张图片: enter image description here

使用SpriteBatch绘制红色图像:

batch.draw(texture, x, y, width, height);

白色图像是根据其α值是否为1而绘制的各个点绘制的。

TextureData td = texture.getTextureData();
td.prepare;
Pixmap map = td.consumePixmap();
for (int i = 0; i < map.getWidth(); i++)
            for (int j = 0; j < map.getHeight(); j++)
                if (new Color(map.getPixel(i, j)).a == 1)
                    points.add(new Point(i, j));

以上是用于获取所有非透明像素的代码。 它们显示为白色图像,似乎与原始纹理相反。

然而,绘制的点和图像本身总是相反的。

有没有办法解决这个问题?

谢谢。

PS:我尝试了多种方法来解决这个问题:

  • 使用精灵并翻转它们
  • 使用TextureRegions并翻转它们

绝对没有任何效果。

1 个答案:

答案 0 :(得分:0)

是的,这非常令人讨厌,Libgdx与它的坐标系不一致。就像font.draw()从顶部向下绘制。改变迭代你在循环中绘制/绘制的方式,基本上你必须手动翻转它。因此,当j == 0时,y将成为最高值,如果j == map.getHeight y将成为最低值。然后在这些值内线性插值。如果你在循环中显示了什么,我可以帮助更多。