OpenGL动态获取点云数据无法绘制点

WANGZHEN` 2019-04-09 04:43:12
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,请各位大佬帮忙!!!
...全文
311 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
源代码大师 2021-05-06
  • 打赏
  • 举报
回复
希望对你有帮助:https://blog.csdn.net/it_xiangqiang/category_10898660.html
mirro 2020-06-02
  • 打赏
  • 举报
回复
更新显示列表才行呢
Italink 2020-05-08
  • 打赏
  • 举报
回复
方便的话,把项目代码打包发到网盘,给个链接,我帮忙看看
Italink 2020-05-08
  • 打赏
  • 举报
回复
引用 楼主 WANGZHEN` 的回复:
引用 1 楼 原来如此~ 的回复:
大哥,我也是刚学,遇到了这个问题,能告诉我为啥吗?
Qt中需要用定时器来刷新 刚好最近我在做Qt的opengl教程,需要的话可以看看 完全使用OpenGL的c++封装,逐过程讲解,与learnOpenGL完全一致,有完整代码 https://blog.csdn.net/qq_40946921/category_9969351.html
原来如此~ 2020-05-08
  • 打赏
  • 举报
回复
大哥,我也是刚学,遇到了这个问题,能告诉我为啥吗?

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧