如何使用着色器程序将2D场景放入QOpenGLWidget窗口?

问题描述 投票:0回答:1

我试图将整个二维三角形场景放入窗口。我正在使用着色器程序来处理绘制三角形。我只期望看到900个三角形中的一小部分。但是,当我使用已弃用的OpenGL API在类似场景中绘制方块时,它会按预期工作。

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

我概述了我在下面所做的事情。

工具

  • Linux的
  • Qt 5.11.1
  • OpenGL ES

建立

  1. 场景是1M x 1M
  2. 使用着色器程序将900个三角形添加到场景中 它是在场景中均匀分布的30 x 30个三角形网格

问题

  • 试图使整个场景适合窗口。
  • 结果是在窗口中只能看到900个三角形中的75个。

这是triangles演示的屏幕截图。

Triangles demo source:

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

什么有效

我发现使用已弃用的OpenGL API,使用GL_QUADS绘制正方形,可以满足我的需求。但是,我想使用着色器。

这是squares演示的屏幕截图。它是1M x 1M场景中的10 x 10格的网格。

Squares demo source:

  • squares演示的完整源代码在github上。
c++ opengl glsl qt5 shader
1个回答
0
投票

我发现了这个bug。我在triangles.cpp分配了VBO。我使用了错误的字节数。

更改:

_vertexBuffer.allocate(_vertexes, _vertexCount);

至:

_vertexBuffer.allocate(_vertexes, _vertexCount * sizeof(QVector3D));

解决了这个问题。

© www.soinside.com 2019 - 2024. All rights reserved.