Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Qt5.0.2和OpenGL 3+;渲染问题_C++_Qt_Opengl 3_Qglwidget - Fatal编程技术网

C++ Qt5.0.2和OpenGL 3+;渲染问题

C++ Qt5.0.2和OpenGL 3+;渲染问题,c++,qt,opengl-3,qglwidget,C++,Qt,Opengl 3,Qglwidget,我已经编写了使用3+函数的小型OpenGL引擎。我目前正在尝试将我的引擎集成到QGLWidget中,但遇到了问题。当在没有qt框架的情况下渲染obj模型时,我得到了预期的结果,但当使用qt时,我的OpenGL缓冲区以某种方式损坏,以至于我看到了错误的结果,甚至什么也看不到 没有Qt: 在QGLWidget中: 我想询问Qt是否会在QGLWidget::paintGL()调用之间更改任何OpenGL状态。 我的对象按以下顺序初始化和渲染: 初始化: Create and bind vertex

我已经编写了使用3+函数的小型OpenGL引擎。我目前正在尝试将我的引擎集成到QGLWidget中,但遇到了问题。当在没有qt框架的情况下渲染obj模型时,我得到了预期的结果,但当使用qt时,我的OpenGL缓冲区以某种方式损坏,以至于我看到了错误的结果,甚至什么也看不到

没有Qt:

在QGLWidget中:

我想询问Qt是否会在QGLWidget::paintGL()调用之间更改任何OpenGL状态。 我的对象按以下顺序初始化和渲染:

初始化:

Create and bind vertex array
Create and bind vertex buffer
Fill vertex buffer (works fine - obj loader tested many times)
Calls to glVertexAttribPointer() and glEnableVertexAttribArray()
渲染:

Bind vertex array
Shaders, uniforms, etc.
glDraw*()

您看到的问题是,Qt正在为您设置系统上的C语言环境,它希望浮点数以逗号分隔,而不是以句点分隔

调用
QApplication

例如:

std::setlocale(LC_ALL, "POSIX");

看起来你的纹理没有加载?我认为你的树的枝叶是有纹理的多边形,它们看起来像第二张图中的实心多边形。如果您正在从文件加载纹理,是否检查它们是否仍然成功加载?@Reto Koradi,纹理已正确加载,并在顶点数组之前绑定。此外,这并不是唯一的问题:顶点缓冲区在某种程度上被破坏了:只要看看手掌躯干和长方体就知道了。很难说会是什么。您调用了
glGetError()
,并确保它没有任何抱怨?您只在创建了上下文并且是当前上下文的方法中进行GL调用?您的代码中可能已经有一个bug,而您很幸运它以前可以工作。特别是,我将仔细研究所有对象ID的管理。确保它们都是正确生成的,而不是意外删除(在C++对象中封装时很常见),并且正确的ID到处都是。@ Reto Kaladii,我已经找出了一些有趣的细节。我已注销到一个文件,其中列出了从OBJ文件加载的顶点和纹理坐标。似乎在Qt框架中,glm::vec3和glm::vec2(我使用glm作为数学库)的组件以某种方式被舍入为int值。这就是为什么没有纹理:纹理坐标已损坏-(0,0),而不是浮点值。我仍然不明白发生了什么。顺便说一句,我使用GCC和QtCreator静态地将我的应用程序与引擎链接。@Reto Koradi,我发现问题是由std::stof()引起的,它在我的非Qt项目中返回浮点值,但在Qt项目中,值变为四舍五入。我不知道为什么会发生这种情况,因为我的引擎与Qt没有任何关系。引擎库以及非Qt和Qt项目都是用G++编译的。。。然而,你的回答是真实的!无论如何谢谢你!我想既然我也被它击中了,我会继续为下一个人提供答案!你的问题是我唯一能找到的。