Ich bin in der Phase meiner Spieleentwicklung, in der ich ein HUD oder eine GUI erstellen muss. Ich bin noch nie zu diesem Teil gekommen, also weiß ich nicht, wie es gemacht wird. Ich habe versucht, ein einfaches Quad an einer festen Position auf dem Bildschirm zu rendern, aber es gibt ein Problem. Damit meine Kamera mit Orthographie funktioniert, verwende ich Folgendes:
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);
}
Ich sehe nicht, wie ich mit dieser Methode etwas am Bildschirm reparieren kann. Irgendwie darum herum? Vielen Dank :)
([0...1], [0...1], 0, 1)
Projektion, Ansicht oder Weltmatrix verwenden, landen sie immer im Bildschirmbereich.Antworten:
Dies ist von einer alten OpenGL-basierten Spiel-Engine, die ich vor ungefähr sieben Jahren in C ++ zu schreiben versucht habe. Ich habe versucht zu erklären, wie ich mit 3D-Welt- und 2D-GUI-Rendering-Operationen umgegangen bin. Ich habe vier primäre Methoden in meiner OpenGL-Renderer-Klasse (OGLRender) verwendet:
render2D () für die eigentliche 2D-GUI-Zeichnung.
Und dann würde ich in der Haupt-Thread-Schleife die Methoden einfach in der folgenden Reihenfolge aufrufen:
Ich zeichne also zuerst meine 3D-Weltszene und dann zuletzt meine GUI, sodass die GUI immer über der Weltszene liegt. Mit der ready3D () -Methode wird die 3D- Weltprojektion für das Zeichnen von Weltszenen vorbereitet und mit der ready2D () -Methode wird die 2D- Orthoszene für das Zeichnen mit der grafischen Benutzeroberfläche vorbereitet .
m_Setup.width
undm_Setup.height
sind nur die Ansichtsfenster-Bildschirmabmessungen.Das Besondere an der ready2D () -Methode ist, dass die
gluOrtho2D()
Funktion mit Argumenten aufgerufen wird, die angeben, dass die GUI- Grundelemente in den Bildschirmkoordinaten gezeichnet werden, die für Windows, Mac und andere Desktop-Bildschirmkoordinatensysteme angegeben sind. So ist beispielsweise links oben (0,0) im Format (X, Y), rechts unten(ViewportWidth-1, ViewportHeight-1)
. UndglTranslatef()
wird verwendet, um die pixelgenaue Positionierung zu korrigieren. Wenn wir also eine Linie von (0,0) bis (0,9) zeichnen, wird die Linie tatsächlich von links oben und gerade nach unten gezogen, und zwar mit einer Gesamtlänge von zehn Pixeln und einer Breite von einem Pixel.Insgesamt interessiert Sie wahrscheinlich nur, was die ready2D () -Methode leistet. Ich habe die Quellcodebeispiele der anderen Methoden bereitgestellt, um Ihnen eine Vorstellung davon zu geben, wie die meisten Spiele 3D-Weltszene und GUI-Zeichenreihenfolge ausführen.
quelle