2010-12-02 85 views
4

因此,我正在使用Java 3D进行游戏,并且正在实施悬停在单位上方的健康栏。在Java 3D场景中绘制不可见的健康酒吧

我首先在单元位置上方的3D点处绘制四边形,然后应用广告牌行为使其始终面向相机。

但我坚持的问题是,健康酒吧有时被其他景色遮挡。

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

  1. 重写的血条像素Z /深度缓冲值,从而使得渲染认为他们是更接近相机比什么它呈现之后。我想尝试renderingAttributes.setDepthTestFunction(RenderingAttributes.ALWAYS)。虽然它使渲染器在早先在同一区域绘制的任何东西上绘制健康栏,但当其他风景稍后绘制在健康栏顶部时,它不起作用。

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

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

  3. 从Java 3D切换到像LWJGL或jMonkeyEngine(不只是针对这个问题,而是关于Java 3D死机的一般抱怨等)。虽然我甚至不确定他们是否对这个特定问题更加灵活。而从我读到的,游戏开发中最糟糕的错误之一就是在发展中期切换引擎。

回答

3

使用painter's algorithm:绘制生命条后,您所绘制场景的其余部分(以Z测试关闭,当然)。

+0

看起来有一种方法可以使用OrderedGroup在Java 3D中执行此操作。 但是,这会引入维护问题。目前,将健康栏放置在单元上方的最简单方法是将其放置在与单元相同的TransformGroup中。但是如果我需要将所有健康状况栏与其他所有景观分开,我需要将它们分成更高层,然后尝试将同一系列转换应用于应用于这些单元的健康栏。 这是可行的,但也许有一个更优雅的解决方案。 – mjomble 2010-12-03 09:38:17