0

私は OpenGL を C++ (シェーダーと GLSL なし) で使用し、球体 (ビリヤード ボール) と円柱 (キュー スティック) を描画するために glu ライブラリ関数を使用しています。テクスチャをバインドし、 SOIL ライブラリを使用glBindTexture()してテクスチャをロードするために使用しています。

スクリーンショットからわかるように、円柱と球の両方にギザギザのエッジがあります。次を呼び出してglHint()、ギザギザのエッジを取り除くにはどうすればよいですか。にgluSphere()は 25 のスタックとスライスがあり、 にgluCylinder()は 100 のスタックとスライスがあります。スタックとスライスを増やしても画質は向上しません。

残りの描画に freeglut を使用する

glHint(GL_POLYGON_SMOOTH_HINT, GL_NICEST); //Smooth polygons
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); //Best perspective corrections
glHint(GL_POINT_SMOOTH_HINT, GL_NICEST); //Smooth points
glHint(GL_LINE_SMOOTH_HINT, GL_NICEST); //Smooth lines

スクリーンショット

4

1 に答える 1

3

まず第一に、あなたの質問はエイリアシング用語に関連しています.これは、トリングルと他のいくつかのプリミティブ(これらはシーン全体を作成する非常に基本的なオブジェクトです)がラスタライズされるときに起こることです(幾何学的記述に基づいて、画面上のいくつかのピクセルが着色されているかどうか) . 「アンチエイリアシングをオンにする方法」を探してみてください。これと関連するトピックに関する多くの役立つ情報があります: http://www.glprogramming.com/red/chapter06.html。あなたの場合、おそらく GL_POLYGON_SMOOTH と GL_BLEND の glEnable になるでしょう。例えば。

glEnable (GL_POLYGON_SMOOTH);
glEnable (GL_BLEND);
glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glHint (GL_POLYGON_SMOOTH_HINT, GL_DONT_CARE);

線を使用する場合は、GL_LINE_SMOOTH と GL_LINE_SMOOTH_HINT があります。

将来のプロジェクトでは、複雑なモデルがビューアーから遠く離れている場合 (球のスライスをできるだけ多く作成する場合) は使用しないようにしてください。これにより、パフォーマンスが低下します。

于 2013-06-05T20:37:45.320 に答える