我正在开发一款使用等距瓦片的行星表面地图(example)的游戏。每个平铺单元都是一个小的BufferedImage元素。白天和晚上的BufferedImage是通过修改这些图像的像素(变暗和蓝移)来实现的,然后在每座建筑上渲染一个窗光贴图(另一个静态cicles )。按照从上到右、从下到左的顺序保持正确的Z顺序,并且只绘制磁贴的条带。不幸的是,这种方法实际上破坏了图像的加速,如果白天和晚上的转换发生在非常快的游戏速度上,渲染会变得非常慢。当前的解决方案是为每个图块缓存大量的阴影,代价是内存的巨大增加。
Graphics2D的Java composition modes是否可以用于此目的,例如,绘制正常颜色的瓷砖,在其上绘制一个变暗的表面,然后应用光照贴图?如何才能确保只有正常磁贴的像素受到重新着色的影响?
发布于 2012-04-29 21:00:26
对我来说,最快的方法似乎是这样的:
CompositeContext将包含纯图像的视图呈现到目标缓冲区
BufferedImage上呈现包含光照贴图图像的视图自定义CompositeContext将首先应用变暗+蓝移,然后乘以光照贴图值。
还要研究一下如何使用VolatileImage (例如,请参阅this article )来利用硬件加速。此外,您还可以考虑使用LWJGL (一个完整的游戏开发库)或JOGL (Java )来利用硬件加速。如果你从来没有做过3D编程,它可能看起来令人望而生畏,但对于2D图形来说,它确实非常优雅和简单。
https://stackoverflow.com/questions/10370622
复制相似问题