2011-11-07 2 views
2

OpenGLで作業を始めたばかりですが、フォントシステムを実装した後に問題が発生しました。未字画のクワッドが暗く見える

私の計画は、いくつかのPathfinding Algorithmsを単純に視覚化することです。

現在、OpenGLのは、このようにセットアップされます(OnSize関数を手動でウィンドウの作成時に一度呼び出されます):

理論的には
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); 
} 

私が唯一の障害物とのラインを視覚化するuntexturedクワッドを使用しますので、私は、ブレンドする必要はありません等を使用してパスを描くことができます...フォントを除いて、すべてが未テクスチャになります。

フォントクラスには、このようなプッシュ/ポップ機能があります(私のFontシステムは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 Matrix Propertiesに問題があるはずです。 Textを描画すると(フォント関連のpushおよびpop関数が呼び出されるため)、Quadは表示されません。

質問: この問題を解決するにはどうしたらいいのでしょうか。なぜなら、私はまだ始まった初心者/学生ですからです。

+0

FYI:ウィンドウのサイズ変更ハンドラにビューポートと投影行列を設定するチュートリアルが表示されても、そのスタイルをコピーしないでください。これらのものは、「キャンバスを準備する」と考えられる他のすべてと同様に、描画機能に設定する必要があります。長期的に見ると、このアプローチはあなたに頭痛の種を救い、信頼してくれるでしょう。それを解決してくれてありがとう、 – datenwolf

答えて

3

クワッドがテクスチャでない場合、未定義の動作になります。おそらく起こることは、以前のテクスチャが使用され、点(0,0)の色が使用されることです。その色が目に見えない原因になる可能性があります。

glDisable(GL_TEXTURE_2D)を使用して、テクスチャリングを無効にして、テクスチャなしのクワッドを描画する必要があります。繰り返しますが、そうでない場合は、以前のテクスチャとテクスチャの座標を使用します。draw()ループを見ることなく、私は定義されていないと仮定しています。

+0

何とかそれについて考えたことはありませんでした。 – niktehpui

+0

私はこれをもう一度読んだようにちょっと凝ったと思いました。ポイント(0,0)は必ずしも使用されるわけではなく、それ以前に発行されたテクスチャ座標が使用されます。 'glBegin()'と 'glVertex()'の呼び出しの間にtexcoordが設定されていない場合、これは未定義です。 – slugonamission

関連する問題