OpenGLで滑らかな線を引く必要があります。これが私が行ったことです。
glEnable( GL_LINE_SMOOTH );
glEnable( GL_POLYGON_SMOOTH );
glHint( GL_LINE_SMOOTH_HINT, GL_NICEST );
glHint( GL_POLYGON_SMOOTH_HINT, GL_NICEST );
glBegin( GL_LINE_STRIP );
for( UINT uiPoint = 0; uiPoint < iNumPoints; ++uiPoint )
{
const Coord &Node = vecPoints[uiPoint];
glVertex3f( Node.x, Node.y, Node.z );
}
glEnd();
他に何ができますか?
代わりに、画面指向の薄いポリゴンを生成し、線までの距離に応じてフラグメントのアルファを設定できます。
例:
a (0,1) b (0,1)
+--------------------------------------+
A | | B
----+--------------------------------------+----
| |
+--------------------------------------+
d (0,0) c (0,0)
セグメント[AB]を描画するとします。
(多かれ少なかれShaderX5で使用される技術)
ただし、これはMSAAを使用できない場合にのみ行ってください。
また、ラインスムージングを機能させるには、ブレンディングをオンにする必要があります。試してください:
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
そして線を引きます。線幅を非整数幅に設定すると役立つ場合があります。
他の人が述べているように、これはポリゴンエッジを滑らかにしませんが、アンチエイリアスされた線を作成します。
別の回答として述べたように、アンチエイリアスを有効にすると役立ちます。これを有効にする方法はコンテキストの作成によって異なりますが、この情報がGLFWユーザーに役立つことを願っています。
GLFW 2を使用する場合:glfwOpenWindowHint(GLFW_FSAA_SAMPLES, 4);
GLFW 3を使用する場合:glfwWindowHint(GLFW_SAMPLES, 4);
...または任意の数のアンチエイリアスサンプル。上記のヒントは、GLFWウィンドウを開く前に設定する必要があります。
GL_POLYGON_SMOOTH自体は役に立ちません。 OpenGLコンテキストが作成されるときに、アンチエイリアスを強制する必要があります。 OpenGLウィンドウを作成するために何を使用しますか?パラメータ間でアンチエイリアスをサポートしているかどうかを確認してください。または、NvidiaまたはATIツールを使用してすべてのOpenGLプログラムのアンチエイリアスを強制することもできます...それはすべてセットアップによって異なります。
GL_LINE_SMOOTH
またはGL_POLYGON_SMOOTH
が何かを行うという保証はありません。
それらはコア機能のように見えますが、私の経験では、多くのハードウェアがこれらを実装していません。一貫して実装していないハードウェアは、実装するとパフォーマンスが大幅に低下する可能性があります。 OpenGL仕様ドキュメントを見ると、これらはライブラリ全体の優れたリファレンスを提供しますが、仕様の一部ではないため、ここにはこれらの記述はありません。これは、glEnableの仕様を確認することである程度確認できます:khronos.org/opengles/sdk/docs/man/xhtml/glEnable.xml