我刚开始使用OpenGL,但在实现Font系统后遇到了问题。
我的计划是简单地想象几种寻路算法。
目前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);
}
理论上我不需要混合,因为我只会使用无纹理的四边形来显示障碍物和线条等以绘制路径......所以除了字体外,一切都没有纹理......
字体类有一个推送和弹出功能,看起来像这样(如果我记得我的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矩阵属性一定有问题。 如果我绘制文本(所以调用与字体相关的推送和弹出函数)我看不到任何四边形。
问题: 我如何解决这个问题和一些背景信息为什么会发生这种情况也很好,因为我还是一个初学者/学生,刚刚开始。
答案 0 :(得分:3)
如果您的四边形没有纹理,您将遇到未定义的行为。可能会发生的是,将使用任何先前的纹理,并且将使用点(0,0)处的颜色,这可能是导致它们不可见的原因。
实际上,您需要在尝试使用glDisable(GL_TEXTURE_2D)
绘制无纹理四边形之前禁用纹理。同样,如果你不这样做,它只会使用之前的纹理和纹理坐标,而不会看到你的draw()
循环,我假设是未定义的。