私は QGLWidget を持っています:
GlWidget::GlWidget(QWidget *parent)
: QGLWidget(QGLFormat(QGL::SampleBuffers), parent)
アンチエイリアシングのために、私は憤慨して実装しましたSamplebuffer
。
いくつかの透明なメッシュでは、GL_BLEND
次の関数を使用しました。
void GlWidget::initializeGL()
{
...
glEnable(GL_MULTISAMPLE);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
私のウィジェットには、関数で描かれた背景もありpainGL()
ます:
void GlWidget::paintGL()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBegin(GL_QUADS);
glColor4f(0.67,0.67,0.75,1);
glVertex2f(-1.0,-1.0);
glVertex2f(1.0,-1.0);
glColor4f(0.2,0.2,0.2,1);
glVertex2f(1.0, 1.0);
glVertex2f(-1.0, 1.0);
glEnd();
// other object drawing stuff
...
}
私が抱えている問題は、透明なメッシュがレンダリングされる場所でウィンドウが透明になることです。
BLEND
描いた色付きの背景に を適用したい。
描画する前に透明な白のないウィジェットをクリアしようとしましたが、これは役に立ちませんでした。
詳細については、この図を参照してください: http://i.stack.imgur.com/AZx3f.png
SampleBuffers を実装する前は、この問題は発生しませんでした。