加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – MODERN OPENGL无法改变glDrawArrays调用之间的统一

发布时间:2020-12-16 22:51:41 所属栏目:Python 来源:网络整理
导读:编辑:我刚刚通过pip重新安装PyOpenGL来解决这个问题.现在,同一程序按预期工作.谢谢你的努力. 整个问题被重写和澄清. 问题不在于(虽然很奇怪)纹理创建和绑定方法,如评论中所述. 我的实际问题是着色器中的统一变量在调用glDrawArrays()之间更改(是的,从着色器

编辑:我刚刚通过pip重新安装PyOpenGL来解决这个问题.现在,同一程序按预期工作.谢谢你的努力.

整个问题被重写和澄清.

问题不在于(虽然很奇怪)纹理创建和绑定方法,如评论中所述.

我的实际问题是着色器中的统一变量在调用glDrawArrays()之间更改(是的,从着色器外部更改)时不会更新它们的值.我通过使用不同类型的制服,不同的值并通过渲染到纹理来检查它们的值来验证.

一旦调用glDrawArrays(),看起来制服的值就会被锁定.之后,我只能在清除颜色缓冲区时再次更改它们.

我愿意为任何有效的解决方案提供奖励.在我看来,发布任何源代码都没有帮助,因为问题似乎并不在于代码.

任何建议都是适用的.

最佳答案
您可以在绘制调用之间更新制服,这就是它们的使用方式.

看看粘贴的代码,正如评论中所指出的那样,第167..169行应该适用于小型texId,但你应该真的改变

glUniform1i(textureUnif,model.texId)
glActiveTexture(GL_TEXTURE0+model.texId)
glBindTexture(GL_TEXTURE_2D,model.texId)

glUniform1i(textureUnif,0)
glActiveTexture(GL_TEXTURE0)
glBindTexture(GL_TEXTURE_2D,model.texId)

虽然你使用的只是GL_TEXTURE0,但你只需要在每次循环迭代时调用glBindTexture().纹理均匀应该包含纹理单元,在这种情况下着色器没有纹理id的概念.

当然,这是OpenGL,通常很难找到错误.你究竟想要画什么?截图会很有帮助.

很可能是OpenGL状态中的其他内容导致统一更新未显示在屏幕上,例如深度测试是一个常见的罪魁祸首.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读