Für meine letzten Projekte habe ich einige der Utilities verwendet, die ich gefunden habe, während ich ein paar Demos gesehen habe here.OpenGL Depth Buffer Problem
Nämlich eine Datei namens opengl.h - hauptsächlich verwendet, um Shader ein wenig wie glew und eine andere Datei gl_font zu verwalten.
gl_font ist eine Klasse, die zum Rendern von Zeichensätzen auf dem Bildschirm mithilfe von Vertexpufferobjekten verwendet wird.
Allerdings, wenn ich dies verwende, um die Framerate in meinem Spiel zu rendern, zeichnet es alles außer der Skybox korrekt. Aus irgendeinem Grund wird die Skybox weiß dargestellt, wie man sieht here, wenn ich nicht die Schriftart es wie this.
Hier sind einige Teile der gl_font Klasse, die ich denke, am wichtigsten sind:
void GLFont::begin()
{
HWND hWnd = GetForegroundWindow();
RECT rcClient;
GetClientRect(hWnd, &rcClient);
int w = rcClient.right - rcClient.left;
int h = rcClient.bottom - rcClient.top;
glPushAttrib(GL_CURRENT_BIT | GL_LIGHTING_BIT);
glDisable(GL_LIGHTING);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, m_fontTexture);
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
glOrtho(0.0f, w, h, 0.0f, -1.0f, 1.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glBindBuffer(GL_ARRAY_BUFFER, m_vertexBuffer);
drawTextBegin();
}
I trie haben glPushAttrib(GL_CURRENT_BIT | GL_LIGHTING_BIT);
zu glPushAttrib Wechsel (GL_CURRENT_BIT | GL_LIGHTING_BIT | GL_TEXTURE_BIT); und die Hintergrundtextur wird zurückgegeben, aber die Schriftart wird nicht gerendert.
void GLFont::end()
{
drawTextEnd();
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindTexture(GL_TEXTURE_2D, 0);
glDisable(GL_TEXTURE_2D);
glDisable(GL_BLEND);
glMatrixMode(GL_PROJECTION);
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
glPopMatrix();
glPopAttrib();
}
This ist ein Bild des Tiefenpuffers, wenn die Schriftart wiedergegeben wird und this ist, was aussieht wie ist, wenn es nicht ist.
Könnte jemand bitte etwas Licht auf dieses Problem werfen?
Jede Hilfe wäre sehr willkommen!
Danke.
Ich rende den Text zuletzt, also sollte die Pushmatrix nicht wichtig sein, oder? – henryprescott
Gott segne Direct3D. – Puppy
Hängt davon ab, ob Sie Modelview von Grund auf neu erstellen. Wie auch immer: wenn du 'GL_LIGHTING_BIT' auch in' glPopMatrix' hast und du den Text zuletzt zeichnest, bist du sicher, dass es einen Tiefen-Test besteht? Haben Sie versucht, GL_DEPTH_TEST für die Zeit der Textwiedergabe zu deaktivieren? – Kos