我正在开发Java2D中的等距游戏。即,请注意我没有直接访问硬件像素着色器(实时软件像素着色器不实用。我可以对每个实体纹理执行一次传递没有明显的性能打击)
我知道典型的方法是以某种方式将各个像素的深度编码到深度缓冲区并查看。但是,我不知道如何在Java2D中有效地做到这一点。我如何存储深度缓冲区?如何过滤图像中的alpha?等
到目前为止,我刚刚反转了用于计算平铺坐标的投影矩阵。但是,如果实体在这些图块边界之外渲染,则效果不佳。
我考虑的另一种方法是使用颜色贴图,但是我遇到与深度缓冲区相同的问题(如果我可以使深度缓冲区工作,我宁愿使用它。)
以下是我正在使用的图片:
答案 0 :(得分:0)
我很好地解决了这个问题。解决方案实际上非常简单,只是非常规。
图形通过TreeMap进行深度排序,然后渲染到屏幕。可以简单地反向遍历这个TreeMap(并保持它直到下一个渲染周期),将光标位置转换为它所覆盖的正确图像(通过测试像素[以反向渲染顺序]并检查它们是否透明。)< / p>
解决方案是在开源项目中,在io.github.jevaengine.world.World类下,选择方法。 https://github.com/JeremyWildsmith/JevaEngine/blob/master/jevaengine/src/main/java/io/github/jevaengine/world/World.java