0

OpenGL でスムージングを行う必要があります。このコードを見つけました

glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 
glShadeModel(GL_SMOOTH); 

glHint(GL_POLYGON_SMOOTH_HINT, GL_FASTEST); 
glEnable(GL_POLYGON_SMOOTH);

glDisable( GL_DEPTH_TEST ); 
glEnable( GL_ALPHA_TEST ); 

この場合、スムージングは​​機能しますが、透明度は必要ありません。この2行が透明性を担っていると思います:

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

しかし、この文字列を削除すると、スムージングが機能しません。スムージングのために何を残す必要がありますか? 私のプロジェクトではスムージングだけが必要で、ブレンドは必要ありません...

4

1 に答える 1

1

さて、スムージングは​​透明度を使用して機能します。エッジは色付けされているかどうかに関係なく、...まあ...透明です。これらの画像を見てください:

滑らかな線 滑らかでない線

ご覧のとおり、右側の線は平滑化されておらず、ピクセルが完全に不透明または完全に透明になっています。左の線は平滑化されており、外側のピクセルは透明です。

プログラムでアンチエイリアシングを強制することを検討しているかもしれません.AAは、エッジのスムージングを管理するだけのハードウェア/ドライバー機能です(AAのタイプによっては、他のことも)。これは OpenGL の機能ではなく、ハードウェア、ドライバー、およびオペレーティング システムの機能であることに注意してください。一般に、OpenGL コンテキストを作成するときに AA のようなものを要求します。

于 2013-06-24T19:14:08.553 に答える