小弟在做一个项目过程中需要完成这样的一个功能在运行过程中需要动态修改EBO和VBO以达到画面动态显示的目的,大致就是在mainwindow下选择需要载入的文件,然后程序读取文件,根据文件的内容改变原有的EBO和VBO于是有如下程序 首先是初始化 ``` c++ void SandTable::initializeGL() { initializeOpenGLFunctions(); // vertex shader QOpenGLShader *vshader = new QOpenGLShader(QOpenGLShader::Vertex, this); vshader->compileSourceFile("://shader/vert_green.vert"); // fragment shader QOpenGLShader *fshader = new QOpenGLShader(QOpenGLShader::Fragment, this); fshader->compileSourceFile("://shader/frag_green.frag"); program = new QOpenGLShaderProgram; program->addShader(vshader); program->addShader(fshader); program->link(); program->bind(); read_csv();//读取点和引索 QVector pointindex; { QFile file("../DEM/demo.txt"); //DEM路径这里读取引索 if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { qDebug()makeCurrent(); //选择加载数据库 QString fileName = QFileDialog::getOpenFileName(this, "选择数据库文件","/",tr("Files (*.db)")); QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); db.setDatabaseName(fileName); if(!db.open()) { QMessageBox::warning(this,"error",db.lastError().text()); } else { //获取dem的长度和宽度 QSqlQuery query; query.exec("SELECT * FROM attribute"); while(query.next()) { // qDebug()doneCurrent(); this->update(); } ``` 程序运行完后有一个奇怪的现象就是在LoadModel()实现了VBO的修改,但是EBO没有任何变化,他们的修改函数都在同一个函数中,按道理来讲VBO修改了,EBO也会跟着修改,但事实却是只修改了VBO!然后考虑到如果写入的EBO数据过多的原因,我特地的减小了EBO写入数据的大小,结果还是没有变化,求懂行的大神给予答复,解决后私我发红包!! 注:更新一下,试了下直接把更改EBO的代码放在resizeGL()中能够实现修改,后来又去查阅了资料发现在main函数中设置QCoreApplication::setAttribute(Qt::AA_ShareOpenGLContexts);也无效,知道了思路一定是在opengl上下文上出问题,但是在这个loadmodel函数里始终无法更改EBO不知道为什么,我也在loadmodel函数中调用了make、done这两个函数了呀