【问题标题】:LibGdx texture drawn as inverse of what #getTextureData givesLibGdx 纹理绘制为与 #getTextureData 给出的相反
【发布时间】:2016-05-08 16:51:00
【问题描述】:

我一直在尝试解决在我的 libgdx 桌面程序上正确显示纹理时遇到的问题。

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

camera.setOrtho(false);

我得到这张图片:

当我将其设置为:

camera.setOrtho(true);

我得到这张图片:

红色图像是用 SpriteBatch 绘制的:

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

而白色图像是从根据 alpha 值是否为 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:我尝试了多种方法来尝试解决此问题:

  • 使用 Sprite 并翻转它们
  • 使用 TextureRegions 并翻转它们

似乎没有任何效果。

【问题讨论】:

  • setOrtho 方法有什么作用?
  • 请务必阅读github.com/libgdx/libgdx/wiki/Coordinate-systems,尤其是关于像素图的部分。
  • 我所做的一切似乎都无法完成这项工作。我想要它做的就是知道我点击的屏幕上的点的颜色是什么,这似乎实际上是不可行的。

标签: java opengl libgdx textures


【解决方案1】:

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

【讨论】:

  • @xoppa 我想过但无法测试。我认为 pixmap 仍然会使用原始数据。因此,如果您翻转该区域,然后为它准备一个像素图,它将保持该翻转?那么他需要做的就是region.flip(false, true); 并像现在一样准备PixMap
  • 是的,抱歉,OP 没有为此提供足够的信息。翻转区域不会修改像素图,只会修改渲染。
猜你喜欢
  • 1970-01-01
  • 2019-08-04
  • 1970-01-01
  • 1970-01-01
  • 2014-09-05
  • 2017-10-09
  • 1970-01-01
  • 2018-04-03
  • 2016-06-29
相关资源
最近更新 更多