OpenGL动态获取点云数据无法绘制点
OpenGL可静态绘制点云数据,动态获取点云数据却无法绘制???
在OpenGL的paintGL方法中可打印动态获取的点云数据
代码如下:
void Triangle::initializeGL(){
//着色器部分
core = QOpenGLContext::currentContext()->versionFunctions<QOpenGLFunctions_3_3_Core>();
ourShader = new Shader(":/res/vertexshadersource.vert", ":/res/fragmentshadersource.frag");
//初始化vertices数组
// 1. 绑定VAO、VBO
core->glGenVertexArrays(1, &VAO); //两个参数,第一个为需要创建的缓存数量。第二个为用于存储单一ID或多个ID的GLuint变量或数组的地址
core->glGenBuffers(1, &VBO);
// 2. 把顶点数组复制到缓冲中供OpenGL使用
core->glBindVertexArray(VAO); //把新创建的缓冲绑定到GL_ARRAY_BUFFER目标
core->glBindBuffer(GL_ARRAY_BUFFER, VBO);
core->glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_DYNAMIC_DRAW);//将顶点数据复制到缓冲的内存中
// 3. 设置顶点属性指针
core->glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(GLfloat), (void*)0);//告诉OpenGL如何解析顶点数据
core->glEnableVertexAttribArray(0);
//开启计时器,返回毫秒
time.start();
//开启状态
// core->glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
// core->glEnable(GL_DEPTH_TEST);
//初试化相机
camera = new Camera(QVector3D(0.0f, 0.0f, 3.0f));
deltaTime = 0.0f;
lastFrame = 0.0f;
isFirstMouse = GL_TRUE;
isLeftMousePress = GL_FALSE;
lastX = width() / 2;
lastY = height() / 2;
}
void Triangle::paintGL()
{
// 4. 绘制物体
core->glPointSize(3);
core->glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
core->glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
core->glEnable(GL_DEPTH_TEST);
GLfloat currentFrame = (GLfloat)time.elapsed()/100.0f;
deltaTime = currentFrame - lastFrame;
lastFrame = currentFrame;
camera->processInput(deltaTime);
ourShader->use();
core->glBindVertexArray(VAO);
core->glDrawArrays(GL_POINTS, 0, sizeof(vertices));
QMatrix4x4 projection;
projection.perspective(camera->zoom, (GLfloat)width()/(GLfloat)height(), 0.1f, 200.f);
ourShader->setMat4("projection", projection);
ourShader->setMat4("view", camera->getViewMatrix());
for(GLuint i = 0; i != 1; ++i)
{
QMatrix4x4 model;
model.translate(cubePositions[i]);
model.rotate(20.0f * i, cubePositions[i]);//这里角度的设置仍然为时间,如果按照Vires大神写的i*20, 箱子不会旋转
ourShader->setMat4("model", model);
core->glBindVertexArray(VAO);
core->glDrawArrays(GL_POINTS, 0, sizeof(vertices));
}
update();
qDebug() << vertices[0] << vertices[1] << vertices[2]
<< vertices[3] << vertices[4] << vertices[5]
<< vertices[6] << vertices[7] << vertices[8]
<< vertices[9] << vertices[10] << vertices[11];//vertices数组中存放的是外部动态接收的点云数据
}
刚接触OpenGL,请各位大佬帮忙!!!