0

完全な OpenGL 初心者なので、解決方法がわからない問題があります。私は JOGL を使用しており、単色と別の境界色で塗りつぶされた円盤を描画しようとしています。私の問題は、次の画像で明らかです。

グルクアドリックディスク

私が理解できないのは、GLU によって生成された行がまだ表示される理由です。これを描画するコードは次のとおりです。

glColor3ub(r, g, b); // purple
gluDisk(quadric, 0, 50, 32, 2);

glColor3ub(r, g, b); // dark gray
gluDisk(quadric, 49, 50, 32, 2);

ブレンディング/アンチエイリアシングで何か間違ったことをしたと思います。アンチエイリアシングを無効にすると、シェイプは単色で描画されます。ただし、AAが必要です。以下に示すように、AA とブレンディングを設定しました。

glEnable(GL2.GL_BLEND);
glBlendFunc(GL2.GL_SRC_ALPHA, GL2.GL_ONE_MINUS_SRC_ALPHA);

glEnable(GL2.GL_LINE_SMOOTH);
glHint(GL2.GL_LINE_SMOOTH_HINT, GL2.GL_NICEST);

glEnable(GL2.GL_POLYGON_SMOOTH);
glHint(GL2.GL_POLYGON_SMOOTH_HINT, GL2.GL_NICEST);

最後に、GLCanvas は次の GLCapabilities で作成されます。

caps.setAlphaBits(16);
caps.setDoubleBuffered(true);
caps.setHardwareAccelerated(true);

それ以外は、Quadric レンダリング プロパティがデフォルトです。誰かが私が間違ったことを理解していますか? 情報が不足している可能性があることをお詫びします。読んでくれてありがとう!

イリアス

4

1 に答える 1

1

犯人はGL_POLYGON_SMOOTHです。スムージングは​​簡単には機能せず、ご覧のようなアーティファクトはその結果です。はるかに優れたアンチエイリアシング方法は、マルチサンプリングです。http://www.opengl.org/wiki/Multisamplingにチュートリアルがあります

于 2013-07-04T15:50:36.817 に答える