Je travaille donc sur un jeu en Java 3D et j'implémente des barres de santé qui survolent les unités.Dessin de barres de santé non masquées dans une scène Java 3D
J'ai commencé par dessiner un quad à un point 3D au-dessus de l'emplacement de l'unité et en appliquant un comportement Billboard pour le faire toujours face à la caméra.
Mais le problème que je suis bloqué avec est que les barres de santé sont parfois obscurcies par d'autres paysages.
Je suis en tenant compte des options suivantes:
Redéfinition de la valeur tampon Z/profondeur pour les pixels de la barre de santé pour faire le renderer pensent qu'ils sont plus près de la caméra que tout ce qu'elle rend par la suite.
J'ai essayé
renderingAttributes.setDepthTestFunction(RenderingAttributes.ALWAYS)
. Bien que le moteur de rendu dessine la barre de santé en plus de tout ce qu'il a dessiné dans la même zone plus tôt, cela n'aide pas lorsque l'autre paysage est dessiné au-dessus de la barre de santé plus tard.Existe-t-il un meilleur moyen de faire cela en Java 3D?
Projection des emplacements 3D des barres de santé sur un plan 2D devant la caméra. Cela peut sembler faisable, mais avant que je parte en réinventant toutes les maths nécessaires pour cela, peut-être que quelqu'un peut signaler une solution existante.
Passer de Java 3D à quelque chose comme LWJGL ou jMonkeyEngine (pas seulement pour ce problème, mais les plaintes générales au sujet de Java 3D sont mortes, etc.). Bien que je ne suis même pas sûr qu'ils soient plus flexibles pour ce problème particulier. Et d'après ce que j'ai lu, l'une des pires erreurs dans le développement du jeu est de changer le moteur en cours de développement.
On dirait qu'il existe un moyen de le faire en Java 3D en utilisant un OrderedGroup. Toutefois, cela entraînerait un problème de maintenance. Actuellement, le moyen le plus simple de positionner la barre de santé au-dessus de l'unité est de la placer dans le même TransformGroup que l'unité. Mais si j'ai besoin de séparer toutes les barres de santé de tous les autres paysages, je dois les séparer à un niveau supérieur et ensuite essayer d'appliquer la même série de transformations aux barres de santé qui sont appliquées aux unités. C'est faisable, mais il y a peut-être une solution plus élégante. – mjomble