首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用着色程序将2D场景安装到QOpenGLWidget窗口中?

如何使用着色程序将2D场景安装到QOpenGLWidget窗口中?
EN

Stack Overflow用户
提问于 2018-09-03 01:08:19
回答 1查看 77关注 0票数 0

我试着把整个二维的三角形场景放进窗户里。我正在使用一个着色程序来处理绘制三角形。我只是我期望看到的900个三角形中的一小部分。但是,当我使用不推荐的OpenGL API来绘制类似场景中的方块时,它的工作方式与预期的一样。

它必须有一些与MVP矩阵,我要传递到顶点着色。请参阅paintGL()模块中的scene.cpp方法。这就是我在绘制三角形之前设置glViewportmvpMatrix的地方。

我已经概述了我在下面所做的工作。

工具

  • Linux
  • Qt 5.11.1
  • OpenGL ES

设置

  1. 现场是1M×1M
  2. 使用着色程序将900个三角形添加到场景中
    • 它是一个由30x30个三角形组成的网格,在场景中分布均匀。

问题

  • 有人试图把整个场景放进窗户里。
  • 结果,在900个三角形中,只有75个可以在窗口看到。

下面是三角形演示的屏幕截图。

三角形演示源:

  • scene.cpp模块包含paintGL方法。
  • triangles.cpp模块是建立着色器程序和构造三角形的地方。
  • 三角形演示的完整源代码在github上。

什么起作用了

我发现,使用不推荐的OpenGL API,使用GL_QUADS绘制正方形,可以完成我正在寻找的任务。但是,我想使用着色器。

下面是正方形演示的屏幕截图。在1M×1M的场景中,它是由10×10正方形组成的网格。

正方形演示源:

  • 正方形演示的完整源代码在github上。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-03 03:11:27

我找到窃听器了。那是在triangles.cpp,我在那里分配VBO。我用错字节计数了。

改变:

代码语言:javascript
复制
_vertexBuffer.allocate(_vertexes, _vertexCount);

至:

代码语言:javascript
复制
_vertexBuffer.allocate(_vertexes, _vertexCount * sizeof(QVector3D));

解决了这个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52142158

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档