Pri*_*tic 7 qt opengl-es openscenegraph qml
我正在混合两个使用OpenGL的库:Qt和OpenSceneGraph.我的目标是OpenGL ES 2,所以一切都是通过着色器和ES 2兼容调用完成的.
我通过尝试将OSG绘制到QDeclarativeItem上来专门使用OSG和QtDeclarative.我按照Qt文档中建议的方式执行此操作:在beginNativePainting()/ endNativePainting()之间包装所有OpenGL调用.
这工作正常,直到我在OpenSceneGraph场景中使用纹理.当我这样做时,由于缺少更好的单词,我的QML窗口变得"混乱".为了使其尽可能简单,我的OSG场景包含一个应用了纹理的平面.我使用基本的OpenGL调用重新创建了场景,不再出现问题.这里的问题总结为一堆图片:



你可以看到最后一个截图发生了奇怪的事情.不要担心原始OpenGL场景透明的黑色背景,这只是使用黑色清晰颜色的OSG.问题是用QML(矩形)设置的其他项目搞砸了.
编辑:澄清会发生什么:我用QML绘制的矩形都伸展到屏幕的右边缘.我还注意到,如果我在QML中的OpenSceneGraph项目之后绘制矩形,它们就不会出现(之前我没有注意到).我在以下屏幕截图中的OSG项目之后绘制紫色黑色矩形...请注意它会消失.可能会发生更多奇怪的事情,但这是我观察到的所有矩形播放.
之前

后

我是OpenGL的新手,所以我不知道什么样的调用/状态设置会导致这样的事情发生.我认为OpenSceneGraph会使一些OpenGL状态发生变化,这会搞砸Qt的绘图引擎.我也知道这只会在OSG使用纹理时发生...如果我在OSG场景中不应用纹理,则不会发生这种情况.这就是我被困住的地方.
此外,我尝试使用BuGLe在OSG中启用和不启用纹理的OpenGL调用跟踪,以查看是否可以找出有问题的状态更改.我发现了一些差异,甚至一些全局状态OSG改变了(例如glPixelStorei())两者之间,但重置我发现的变化没有区别.如果我知道要寻找什么,这将有很大帮助.如果有人感到疯狂,我也有堆栈痕迹:
编辑2: 这是一个可能有用的差异.在相关线条明显之前,您需要向下滚动. http://www.mergely.com/nUEePufa/
编辑3: 哇!好吧,那差异对我有所帮助.OSG启用VertexAttribArray 3但不禁用它.在OSG渲染其帧之后调用glDisableVertexAttribArray(3)似乎可以部分解决问题; 没有更多的QML矩形拉伸.但是,OSG项目后绘制的矩形仍未显示.
也许您只需要重新启用 GL_TEXTURE_2D ?我注意到在您的示例中,OSG 启用了纹理,然后禁用了 GL_TEXTURE_2D。因此,两种情况(有纹理与没有纹理)之间的区别在于,使用纹理的情况在禁用纹理的情况下完成,而没有纹理的情况则使 GL_TEXTURE_2D 处于初始状态。
如果 Qt 需要/期望启用纹理来绘制四边形,则可能会导致不显示任何内容。
| 归档时间: |
|
| 查看次数: |
1188 次 |
| 最近记录: |