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,請各位大佬幫忙!!!
uj5u.com熱心網友回復:
大哥,我也是剛學,遇到了這個問題,能告訴我為啥嗎?uj5u.com熱心網友回復:
Qt中需要用定時器來重繪
剛好最近我在做Qt的opengl教程,需要的話可以看看
完全使用OpenGL的c++封裝,逐程序講解,與learnOpenGL完全一致,有完整代碼

https://blog.csdn.net/qq_40946921/category_9969351.html
uj5u.com熱心網友回復:
方便的話,把專案代碼打包發到網盤,給個鏈接,我幫忙看看uj5u.com熱心網友回復:
更新顯示串列才行呢轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/53619.html
標籤:C++ 語言
上一篇:誰知道這個報錯是什么意思
