我剛開始使用OpenGL,但在實現Font系統後遇到問題。無紋理的四邊形顯示爲黑色
我的計劃是簡單地將幾種尋路算法可視化。
目前的OpenGL被設置這樣的(篩上部分被手動上窗口創建調用一次):
void GLWindow::OnSize(GLsizei width, GLsizei height)
{
// set size
glViewport(0,0,width,height);
// orthographic projection
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0,width,height,0.0,-1.0,1.0);
glMatrixMode(GL_MODELVIEW);
m_uiWidth = width;
m_uiHeight = height;
}
void GLWindow::InitGL()
{
// enable 2D texturing
glEnable(GL_TEXTURE_2D);
// choose a smooth shading model
glShadeModel(GL_SMOOTH);
// set the clear color to black
glClearColor(0.0, 0.0, 0.0, 0.0);
glEnable(GL_ALPHA_TEST);
glAlphaFunc(GL_GREATER, 0.0f);
}
從理論上講,我不需要混合,因爲我只會用無紋理的四邊形可視化障礙和線等等來繪製路徑...所以一切都將被無紋理,除了字體...
字體類具有推和彈出功能,看起來像這樣(如果我記得對我的字體系統是基於NeHe教程,我剛纔跟隨):
inline void GLFont::pushScreenMatrix()
{
glPushAttrib(GL_TRANSFORM_BIT);
GLint viewport[4];
glGetIntegerv(GL_VIEWPORT, viewport);
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
glOrtho(viewport[0],viewport[2],viewport[1],viewport[3], -1.0, 1.0);
glPopAttrib();
}
inline void GLFont::popProjectionMatrix()
{
glPushAttrib(GL_TRANSFORM_BIT);
glMatrixMode(GL_PROJECTION);
glPopMatrix();
glPopAttrib();
}
所以問題: 如果我沒有繪製文本,我可以看到我想繪製的四邊形,但它們非常暗,所以我的一般OpenGL矩陣屬性一定有問題。 如果我繪製文本(所以調用字體相關的推送和彈出功能),我看不到任何四邊形。
問題: 如何解決這個問題和一些背景信息,爲什麼發生這種情況也會很好,因爲我仍然是一個初學者/學生,他們剛剛起步。
僅供參考:即使您看到在窗口的resize處理程序中設置視口和投影矩陣的教程,請不要複製該樣式。這些東西應該像繪畫功能一樣,可以被認爲是「準備畫布」。從長遠來看,這種方法將爲您節省很多頭痛,相信我。 – datenwolf