我尝试使用消除锯齿来获取场景中的整形边缘。但是,当我启用多重采样并且我调用QOpenGLWidget :: update()时,场景不会更新。虽然如果我点击场景然后渲染消除锯齿的场景。如果我注释掉一行设置使用的样本数,那么在调用update时,别名场景将正常呈现。
我在main.cpp中使用CoreProfile 4.3设置默认表面格式,样本设置为4。
mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
public void onCompletion(MediaPlayer mp) {
v.clearAnimation();
switch (v.getId()) {
case R.id.imgbutton1:
v.setBackgroundResource(R.drawable.boat);
break;
case R.id.imgbutton2:
v.setBackgroundResource(R.drawable.train);
break;
case R.id.imgbutton3:
v.setBackgroundResource(R.drawable.rocket);
break;
}
Log.i(TAG, "v animation clear: " + v.getAnimation());
Log.i(TAG, "Later mp: " + mp.getAudioSessionId());
}
});
在我的viewer.cpp中继承了QOpenGLWidget我启用了GL_MULTISAMPLE
#include <QApplication>
#include "widgets/mainwindow.h"
int main(int argc, char *argv[])
{
auto format = QSurfaceFormat();
format.setVersion(4,3);
//If I comment out this line everything works great but with jagged edges
format.setSamples(4);
format.setProfile(QSurfaceFormat::CoreProfile);
QSurfaceFormat::setDefaultFormat(format);
QApplication a(argc, argv);
MainWindow w;
w.show();
w.resize(1200, 800);
return a.exec();
}
当我在使用多重采样时调用更新时,当我加载新网格时,不会渲染的示例(还有更多)。
QOpenGLFunctions *f = QOpenGLContext::currentContext()->functions();
f->glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
f->glEnable(GL_MULTISAMPLE);
但是,当我点击屏幕时,场景会更新。与我的网格导入方法相比,我的鼠标移动事件在下面,并没有做任何特别的事情。
auto ViewerWidget::importMesh(QString filename) -> void
{
mesh = new Mesh(filename);
initializeGL();
update();
}
如何解决这个问题的任何建议将不胜感激!提前谢谢。