سؤال

في مشاريعي القليلة الأخيرة ، كنت أستخدم بعض ملفات الأداة المساعدة التي وجدتها أثناء النظر في عدد قليل من العروض التوضيحية هنا.

وهي ملف يسمى OpenGL.H - يستخدم بشكل أساسي لإدارة التظليلات مثل GLEW وملف آخر GL_FONT.

GL_FONT هي فئة يستخدمونها لتقديم الخطوط على الشاشة باستخدام كائنات العازلة في Vertex.

ومع ذلك ، عندما أستخدم هذا لتقديم الإطار في لعبتي ، فإنه يرسم كل شيء ما عدا Skybox بشكل صحيح. لسبب ما ، أصبح Skybox أبيض كما رأينا هنا, ، إذا لم أقم بإعداد الخط ، يبدو الأمر كذلك هذه.

فيما يلي بعض أجزاء فئة GL_FONT التي أعتقد أنها الأكثر أهمية:

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();
}

لدي تري تغيير glPushAttrib(GL_CURRENT_BIT | GL_LIGHTING_BIT); إلى glpushattrib (gl_current_bit | gl_lighting_bit | gl_texture_bit) ؛ ويعود نسيج الخلفية ، لكن الخط لم يتم تقديمه.

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();
}

هذه هي صورة للمخزن المؤقت للعمق عندما يتم تقديم الخط و هذه هو ما يبدو عندما لا يكون كذلك.

هل يمكن لأي شخص إلقاء بعض الضوء على هذه المشكلة من فضلك؟

أي مساعدة سيكون محل تقدير كبير!

شكرًا.

هل كانت مفيدة؟

المحلول

يشبه begin() يفتقر إلى glPushMatrix() بعد، بعدما glMatrixMode(GL_MODELVIEW). قد يتسبب ذلك في تقديم المشهد بشكل غير صحيح عند تقديم بعض النص أيضًا.

لم يكن glGetError() تقرير أ GL_STACK_UNDERFLOW خطأ؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top