Qt应用中的libQGL
我在Qt项目中使用libQGL制作点云查看器。问题是,点越多(超过300.000),与查看器的交互(旋转、平移、缩放)就越慢。如何修复此问题?在缩放/平移/旋转时渲染较少的点。渲染点云时,可以通过将顶点属性缓冲区的步长乘以3来渲染每三个点 (使用QOpenGLShaderProgram方法)Qt应用中的libQGL,qt,opengl,Qt,Opengl,我在Qt项目中使用libQGL制作点云查看器。问题是,点越多(超过300.000),与查看器的交互(旋转、平移、缩放)就越慢。如何修复此问题?在缩放/平移/旋转时渲染较少的点。渲染点云时,可以通过将顶点属性缓冲区的步长乘以3来渲染每三个点 (使用QOpenGLShaderProgram方法) 即使对于一个基本的GPU,300K点的渲染也很简单。您需要提供更多详细信息,说明如何将数据传输到GPU,以及每帧更新要做什么-最好使用代码示例。 void PointCloud::paintGL(){
即使对于一个基本的GPU,300K点的渲染也很简单。您需要提供更多详细信息,说明如何将数据传输到GPU,以及每帧更新要做什么-最好使用代码示例。
void PointCloud::paintGL(){
glClear (GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_STENCIL_BUFFER_BIT);
pointProgram->bind ();
points.bind ();
if(transforming){
pointProgram->setAttributeBuffer (pointLoc, GL_FLOAT, offsetof (PointStruct, data), 3,sizeof(PointStruct)*3);
} else {
pointProgram->setAttributeBuffer (pointLoc, GL_FLOAT, offsetof (PointStruct, data), 3,sizeof(PointStruct));
}
CHECK_GL_ERR;
if(transforming){
pointProgram->setAttributeBuffer (pointCol, GL_FLOAT, offsetof (GrabberPointXYZIT,color), 3,sizeof(GrabberPointXYZIT)*3);
} else {
pointProgram->setAttributeBuffer (pointCol, GL_FLOAT, offsetof (GrabberPointXYZIT,color), 3,sizeof(GrabberPointXYZIT));
}
CHECK_GL_ERR;
pointProgram->enableAttributeArray (pointLoc);
pointProgram->enableAttributeArray (pointCol);
pointProgram->setUniformValue (mvpLoc, pMat*vMat);
glDrawArrays (GL_POINTS,0, numPoints);
CHECK_GL_ERR;
pointProgram->release ();
points.release ();
}