【问题标题】:OpenGL 3.2 2D rendering issuesOpenGL 3.2 2D 渲染问题
【发布时间】:2014-07-24 22:12:38
【问题描述】:

rendering artifact http://byte-werx.com/rendering-artifact.png

当我创建两个精灵批次并尝试在同一帧上绘制两次时,屏幕的一半(或附近)会“丢失”;无论小篝火精灵的位置如何,都会发生这种情况。

当以线框模式渲染时,会出现相同的结果,因此不会出现一个巨大的黑色多边形正在被绘制并覆盖下面的瓦片地图。

这是用于初始化 OpenGL 的代码:

glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
glEnableClientState(GL_VERTEX_ARRAY);
glActiveTexture(GL_TEXTURE1);
glActiveTexture(GL_TEXTURE0);
glDepthRange(0.0f, 1.0f);
glEnable(GL_DEPTH_TEST);
glDisable(GL_CULL_FACE);
glEnable(GL_TEXTURE_2D);
glDisable(GL_LIGHTING);
glDepthFunc(GL_LEQUAL);
glDisable(GL_DITHER);
glClearDepth(1.0f);
glEnable(GL_CW);

glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

我已经在这里上传了相关代码:download

SDL2 用于创建窗口和上下文管理,但我不使用 SDL 中的任何其他东西。

【问题讨论】:

  • 我敢说你的投影矩阵是错误的,你的平面偏向前剪裁平面......或者它可能是 Z 战斗......你能显示代码设置投影?
  • 不确定这真的是 OpenGL-3.2 特有的。
  • @rodrigo 这是投影矩阵:m_ProjectionMatrix = glm::ortho(0.0f, 1024.0f, 768.0f, 0.0f, -1.0f, 1.0f);
  • @NateStrandberg 养成这个习惯很好。此外,如果您不确定哪些功能已被弃用;查看 OpenGL 3.3 参考页面。
  • @NateStrandberg OpenGL 3.2 非常 相似,我实际处理的唯一区别是,在 3.3 中,所有已弃用的 guff 实际上都已删除,除非您使用兼容性配置文件。

标签: c++ opengl sprite opengl-3 sdl-2


【解决方案1】:

解决了这个问题,调用 glDrawElements 后我没有解除对数组/元素缓冲区的绑定。

必须把它放在 glDrawElements 之后:

glBindVertexArray(0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);

【讨论】:

    猜你喜欢
    • 2013-06-06
    • 1970-01-01
    • 2019-04-02
    • 1970-01-01
    • 2013-09-26
    • 1970-01-01
    • 1970-01-01
    • 2012-05-14
    • 1970-01-01
    相关资源
    最近更新 更多