Qt OpenGL点大小

时间:2017-12-30 12:00:41

标签: c++ qt opengl 3d glpointsize

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

更改点的大小
glPointSize(4);

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

绘制GL_TRIANGLES对我来说非常合适。

我想绘制点以显示真实世界物体的点云。

2 个答案:

答案 0 :(得分:3)

如果您使用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

答案 1 :(得分:0)

根据建议的特征,首先在您的 C ++代码(不是着色器)中使用此行启用点大小

glEnable(GL_PROGRAM_POINT_SIZE);

然后按照Scheff的建议,在您的顶点着色器代码中,添加gl_PointSize内置函数。 因此,例如,如果您希望一个点的大小为12,请像这样使用它。

// main from your vertex.glsl shader (not from your main.cpp!)
void main() {
    ...
    gl_PointSize = 12;
    ...
}