在Java 3D场景中绘制不明显的健康栏

时间:2010-12-02 21:46:53

标签: java java-3d depth-buffer zbuffer

所以我正在开发一个Java 3D游戏,我正在实现在单位上方悬停的健康栏。

我首先在设备位置上方的3D点处绘制四边形并应用Billboard行为使其始终面向相机。

但我遇到的问题是健康酒吧有时会被其他风景遮挡。

所以我正在考虑以下选项:

  1. 覆盖健康条像素的Z /深度缓冲区值,使渲染器认为它们比之后呈现的任何内容更接近相机。

    我试过了renderingAttributes.setDepthTestFunction(RenderingAttributes.ALWAYS)。虽然它使渲染器在早先在同一区域绘制的任何内容上绘制健康栏,但是当稍后在健康栏上绘制其他场景时,它无效。

    在Java 3D中有更好的方法吗?

  2. 将健康条的3D位置投影到相机前面的2D平面上。听起来可行,但在我开始重新发明所需的所有数学之前,也许有人可以指出现有的解决方案。

  3. 从Java 3D切换到类似LWJGL或jMonkeyEngine的东西(不仅仅是针对这个问题,还有关于Java 3D死机等的一般抱怨)。虽然我甚至不确定他们是否对这个特殊问题更灵活。从我所看到的,游戏开发中最严重的错误之一是在开发中期切换引擎。

1 个答案:

答案 0 :(得分:3)

使用painter's algorithm:在之后绘制健康栏你已经绘制了场景的其余部分(当然,关闭了Z测试)。