Qt OpenGL点大小

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt OpenGL点大小相关的知识,希望对你有一定的参考价值。

我正在使用QOpenGLFunctions和现代OpenGL。我想在我的窗口上绘制一些GL_POINTS,但点大小似乎非常小。通常,您可以使用更改点的大小

glPointSize(4);

但是,QOpenGLFunctions包装器中不存在此代码段,因此我不确定如何更改它们。

绘图GL_TRIANGLES对我来说非常好。

我想画点来显示真实世界物体的点云。

答案

如果你使用QOpenGLFunctions,真的没有glPointSize()可用。为什么?

QOpenGLFunctions类提供对OpenGL ES 2.0 API的跨平台访问。

khronos.org上交叉检查:

+--------------+-----------------------------------------------------------------------+
| Function /   |                             OpenGL Version                            |
| Feature Name | 2.0 | 2.1 | 3.0 | 3.1 | 3.2 | 3.3 | 4.0 | 4.1 | 4.2 | 4.3 | 4.4 | 4.5 |
+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
| glPointSize  |  v  |  v  |  v  |  v  |  v  |  v  |  v  |  v  |  v  |  v  |  v  |  v  |
+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+

因此,它支持OpenGL,但不支持OpenGL ES。

有两种可能的选择:

选项1:gl_PointSize

在OpenGL ES中,您可以使用GLSL着色器变量gl_PointSize

(我在搜索适当的文档链接时“意外地”发现了这一点 - 之前没有使用过它,也没有使用它。)

derhass提供了额外的提示,如果由glEnable(GL_PROGRAM_POINT_SIZE)启用,也可以与OpenGL(非ES)一起使用。

GL_PROGRAM_POINT_SIZE

如果启用并且顶点或几何着色器处于活动状态,则派生的点大小取自gl_PointSize中内置的(可能已剪切的)着色器,并将其限制为依赖于实现的点大小范围。

选项2:使用替代的QOpenGLFunctions_???

您可以明确使用非便携式替代方案(假设您不需要支持手机,嵌入式或类似的东西),而不是QOpenGLFunctions

Qt doc中的最佳概述。我能找到:QAbstractOpenGLFunctions

以上是关于Qt OpenGL点大小的主要内容,如果未能解决你的问题,请参考以下文章

Qt中的OpengL glDrawBuffers()?

片段着色器中的OpenGL点精灵旋转

如何在 Qt 表单类中调整 OpenGL 小部件的大小

如何定义 QT Opengl 帧缓冲区的大小

增加 OpenGL 显示大小

带有 OpenGL 的 Qt MDI 应用程序:如何获取有效的屏幕截图?