2010-12-02 99 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