Je suis à l'étape du développement de mon jeu où j'ai besoin de créer un HUD ou une GUI. Je ne suis jamais arrivé à cette partie, donc je ne sais pas comment c'est fait. J'ai essayé de rendre un simple quad à une position fixe sur l'écran, mais il y a un problème. Pour faire fonctionner ma caméra avec orthographique, j'utilise ceci:
public void lookThrough()
{
GL11.glMatrixMode(GL11.GL_PROJECTION);
GL11.glLoadIdentity();
GL11.glOrtho(position.x, position.x + Display.getDisplayMode().getWidth()/zoom, position.y + Display.getDisplayMode().getHeight()/zoom, position.y, -1, 1);
GL11.glMatrixMode(GL11.GL_MODELVIEW);
}
Je ne vois pas comment je pourrais faire quelque chose de fixe sur l'écran en utilisant cette méthode? Quelque chose autour de ça? Merci :)
([0...1], [0...1], 0, 1)
avec AUCUNE projection, vue ou matrice mondiale, elles atterriront toujours dans l'espace de l'écran.Réponses:
Cela provient d'un ancien moteur de jeu basé sur OpenGL que j'essayais d'écrire il y a environ sept ans écrit en C ++ si nu avec moi alors que j'essaie d'expliquer comment je gérais le monde 3D et les opérations de rendu GUI 2D en son sein. J'ai utilisé quatre méthodes principales dans ma classe de rendu OpenGL (OGLRender), dont:
render2D () pour le dessin GUI 2D réel.
Et puis dans la boucle de thread principale, j'appellerais simplement les méthodes dans l'ordre suivant:
Donc, ce que je fais, c'est que je dessine d'abord ma scène mondiale 3D, puis je dessine mon interface graphique en dernier de cette façon, l'interface graphique est toujours au sommet de la scène mondiale. La méthode ready3D () prépare la projection du monde 3D pour le dessin de la scène mondiale et la méthode ready2D () prépare la scène ortho 2D pour le dessin de l'interface graphique.
m_Setup.width
et nem_Setup.height
sont que les dimensions de l'écran du port de vue.La particularité de la méthode ready2D () est que la
gluOrtho2D()
fonction est appelée avec des arguments qui lui indiquent que lorsque nous dessinons les primitives GUI, nous les dessinons dans les coordonnées d'écran spécifiées pour correspondre à Windows, Mac et autres systèmes de coordonnées d'écran de bureau. Tels que le coin supérieur gauche est (0,0) au format (X, Y) tandis que le coin inférieur droit l'est(ViewportWidth-1, ViewportHeight-1)
. EtglTranslatef()
est utilisé pour corriger le positionnement précis par pixel. De sorte que lorsque nous dessinons une ligne de (0,0) à (0,9), la ligne sera en fait dessinée en haut à gauche et en bas de dix pixels de longueur et d'une largeur de pixel.Dans l'ensemble, vous êtes probablement intéressé par ce que fait la méthode ready2D () . J'ai fourni les exemples de code source des autres méthodes pour vous donner une idée de la façon dont la plupart des jeux font la scène mondiale 3D et l'ordre de dessin de l'interface graphique.
la source