没有纹理的四边形看起来很暗
Untextured Quads appear dark
我刚开始使用OpenGL,但在实现字体系统后我遇到了一个问题。
我的计划是简单地可视化几个寻路算法。
目前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);
}
理论上我不需要混合,因为我只会使用无纹理的四边形来可视化障碍物和线条等来绘制路径…所以所有的东西都是无纹理的,除了字体…
字体类有一个推送和弹出功能,看起来像这样(如果我没记错的话,我的字体系统是基于一个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矩阵属性一定有问题。如果我绘制文本(所以字体相关的push和pop函数被调用),我看不到任何Quads。
问题:我如何解决这个问题和一些背景信息,为什么会发生这种情况也会很好,因为我仍然是一个初学者/学生,谁才刚刚开始。
如果你的四边形没有纹理,你会遇到未定义的行为。可能会发生的情况是,任何先前的纹理将被使用,并且将使用点(0,0)的颜色,这可能是导致它们不可见的原因。
真的,你需要禁用纹理之前尝试使用glDisable(GL_TEXTURE_2D)
绘制无纹理的四边形。再次,如果你不这样做,它只会使用以前的纹理和纹理坐标,没有看到你的draw()
循环,我假设是未定义的。
相关文章:
- std::vector的包装器,使数组的结构看起来像结构的数组
- 看起来is_nothrow_constructible_v()在MSVC中被破坏了,我错了吗
- 学习多线程C++:添加线程不会使执行速度更快,即使它看起来应该
- 尽管一切看起来都很好,但值不会交换
- 自制的上衣:看起来一样,但不完全相同
- 如何使它看起来像正在下的雪
- 如何用逗号分隔输出?如何改进此代码以使其看起来更体面?
- 我的代码看起来不错,但某些输入会导致不需要的输出
- 为什么这个结构的大小是 40,而它看起来应该是 12/24?
- 我需要将阵列样式的邻接矩阵转换为矢量样式(以使其看起来更好)
- 结构化绑定:当某些内容看起来像引用并且行为类似于引用,但它不是引用时
- 如何使QTextEdit看起来被禁用
- 在正确性或良好的代码结构方面,这种动态对象创建看起来如何
- 看起来如此主要的错误.cpp:(.text.startup+0xd6):未定义对"vtable for Counter"的引用?
- C 时间测量看起来太慢了
- 我应该如何使 std::filesystem 看起来符合 Visual Studio 2015 的标准
- 写入.ini文件 - SimpleIni SetValue 尽管看起来成功了,但什么也没做
- std::string 上的 substr 无法正常工作,因为存在一些不可见但看起来像空格的字符
- 没有纹理的四边形看起来很暗
- 绘制纹理四边形看起来是扭曲的