2015-10-31 20 views
15

私はQMLを使用しており、カスタムOpenGLコードを実行したかったのです。私はC++(QQuickItemを拡張)でカスタムウィジェットを作成し、ペイント関数()をオーバーライドしました。
私は自分のアプリケーションを実行し、コンソール版画 深度バッファとステンシルバッファの問題QML

QSGContext::initialize: depth buffer support missing, expect rendering errors 
QSGContext::initialize: stencil buffer support missing, expect rendering errors 

そして、それは予想と同じように、私はエラーをレンダリングするのですか。私は例としてスパイダーモデルを使用します。ここでは、それは

spider stl

が好きで、ここで私は私がによってブロックされるべきも、それを記述するために正確にどのように知りませんが、基本的には反対側の面( enter image description here

を取得してんだよべきものです正面)が回転しているように見えています。

私はこれでデプスバッファエラーを取り除くことができた:

void MyGLWidget::handleWindowChanged(QQuickWindow *win) 
{ 
    if (win) { 
     connect(win, SIGNAL(beforeSynchronizing()), this, SLOT(sync()), Qt::DirectConnection); 
     connect(win, SIGNAL(sceneGraphInvalidated()), this, SLOT(cleanup()), Qt::DirectConnection); 
     win->setClearBeforeRendering(false); 
     QSurfaceFormat glFormat; 
     glFormat.setVersion(3,2); 
     glFormat.setProfile(QSurfaceFormat::CoreProfile); 




     /*I'm showing everything for context, but this is the key line*/ 
     glFormat.setDepthBufferSize(1); 






     win->setFormat(glFormat); 

    } 
} 

だから今、私は唯一のステンシルエラーを取得していますが、それは別の問題が発生します。片面は完全に黒く、照明は見えません。

enter image description here

他のいくつかの背景情報:私はQQuickViewを表示しています。私OpenGLWidgetはQMLにインポートし、そのように埋め込まれている:塗料で

MyGLWidget { 
    id: glWidget 
} 

()私のレンダラーの、私が先頭にglEnable(GL_DEPTH_TEST)glEnable(GL_STENCIL_TEST)を呼び出していますが、それは何もしていないようです。たぶん私は間違った文脈でそれを呼んでいるでしょうか?しかし、それ以外のどこで私がそれを呼ぶことができるのかわかりません。

答えて

3

私のモデル(スパイダーを含む)はすべて正しくない頂点法線を持っていたので、シェーディングの問題がありました。私は他のレンダリングソフトウェアでそれらをチェックアウトする必要がありました。

glFormat.setDepthBufferSize(1)が実際の修正であった

1

Scene Graph and Rendering

glDepthMask(GL_TRUE); 
// your paintings here 
glDepthMask(GL_FALSE); 

参照してみてください。

+0

残念なことに変更はありませんでした。私はリンクを見て、私が解決策を集めることができるかどうかを見ます – faraza

関連する問題