繁体   English   中英

如何获取和设置纹理中的像素(LibGDX)

[英]How to get and set pixels in textures (LibGDX)

我正在制作一个有2个以上团队的游戏,而且-我不想绘制所有可能的彩色建筑物-我正在寻找一种方法来将纹理中的某种颜色替换为团队的颜色。 有没有办法在LibGDX中设置像素颜色和像素颜色,所以我可以这样做? 顺便说一句,我的纹理是一个Texture,而不是TextureRegion或其他任何东西。

您可以读取纹理数据(涉及将纹理数据从VRAM复制到RAM并返回),也可以在上传到GPU之前对其进行修改(直接修改Pixmap)。 但是您可能不必这样做。 取而代之的是,您可以使用着色来做到这一点,如“三十二”上校所说。 幸运的是SpriteBatch具有内置的此功能。 您可以使用batch.setColor方法。 如果您使用的是Scene2d,则可以使用actor.setColor。

batch.setColor(Color.RED); // Everything after this will be tinted (multiplied with) red
batch.draw(texture, x, y);
batch.setColor(Color.WHITE); // set it back to white for the remaining draw calls

如果只需要更改图像部分的颜色。 然后将图像分为两部分。 顺便说一句,我强烈建议您使用TextureAtlas,但这与您的问题无关。

您可以从纹理中获取像素数据,如另一个问题所示

然后,您可以创建一个新的PixMap ,并从原始PixMap逐像素绘制到其上-用您的团队颜色替换任何指定的颜色。

可能有优化的方法,因为它会非常昂贵,甚至LibGDX API都指出了某个地方( 但暂时找不到 )-在我的头顶上,您可能会绘制相同颜色的大方块与此同时。 如果您有一个很好的算法来找到平方。

检查用于PixMap API是否可以使用它。 您可以通过执行Texture newTex = new Texture(PixMap);获得新纹理Texture newTex = new Texture(PixMap);


然而

正如@ColonelThirtyTwo在他的评论中所建议的那样,混合图像很有可能会节省大量处理时间。 创建灰度原始图像然后混合图像要容易得多。 如果整个图像使用不同的团队颜色阴影,则此效果特别好。

但是,可以说您要为建筑物上的标志以外的所有内容指定特定的颜色。 可以将标志设置为单独的图像,并仅用与整个图像相同的方式为该图像着色 ,就像@Xoppa的答案所建议的那样。 因为我看到他的回答与我写这篇文章一样;) )如果是我,那就是我要采取的方法。

否则,您将创建两个图像。 原始图像和蒙版(指定团队颜色像素的应用位置)。 您将蒙版乘以所需的颜色,然后将蒙版应用于原始图像,该图像在要应用蒙版的像素上具有灰度值。

我本人可以将整个图像与颜色混合,或者,如果您不希望将整个图像与颜色相乘,则将图像拆分为两张图像,然后只混合应混合的图像。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM