我在现代OpenGL中使用QOpenGLFunctions。我想在我的窗口上绘制一些GL_POINTS,但点大小似乎非常小。通常,您可以使用
更改点的大小glPointSize(4);
但是,QOpenGLFunctions包装器中不存在此代码段,因此我不确定如何更改它们。
绘制GL_TRIANGLES对我来说非常合适。
我想绘制点以显示真实世界物体的点云。
答案 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;
...
}