13

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();

他に何ができますか?

4

6 に答える 6

22

また、ラインスムージングを機能させるには、ブレンディングをオンにする必要があります。試す:

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

そして線を引きます。線幅を非整数幅に設定すると役立つ場合があります。

他の人が述べているように、これはポリゴンエッジを滑らかにしませんが、アンチエイリアスされた線を作成します。

于 2010-08-20T18:21:11.420 に答える
13

代わりに、画面指向の薄いポリゴンを生成し、線までの距離に応じてフラグメントのアルファを設定できます。

例 :

   a (0,1)                                  b (0,1)
    +--------------------------------------+
  A |                                      | B
----+--------------------------------------+----
    |                                      |  
    +--------------------------------------+
   d (0,0)                                  c (0,0)

セグメント[AB]を描画するとします。

  • 代わりにポリゴンabcdを描画します
  • UVをマッピングします((0,0)、(0,1))
  • 中央のみが白である8x1の白黒テクスチャをバインドします
  • テクスチャからgl_FragColor.aを設定するフラグメントシェーダーでレンダリングします

(多かれ少なかれShaderX5で使用される技術)

ただし、これはMSAAを使用できない場合にのみ行ってください。

于 2010-08-18T13:31:26.053 に答える
5

GL_POLYGON_SMOOTHだけでは、効果はありません。OpenGLコンテキストの作成時に、アンチエイリアスを強制する必要があります。OpenGLウィンドウを作成するために何を使用しますか?パラメータ間のアンチエイリアスをサポートしているかどうかを確認してください。または、NvidiaまたはATIツールを使用してすべてのOpenGLプログラムのアンチエイリアスを強制することもできます...それはすべてセットアップによって異なります。

于 2010-08-18T13:26:56.453 に答える
5

別の回答で述べたように、アンチエイリアスを有効にすると役立ちます。これを有効にする方法は、コンテキストの作成によって異なりますが、この情報がGLFWユーザーに役立つことを願っています。

GLFW 2を使用する場合: glfwOpenWindowHint(GLFW_FSAA_SAMPLES, 4);

GLFWを使用する場合3: glfwWindowHint(GLFW_SAMPLES, 4);

...または任意の数のアンチエイリアスサンプルを選択します。上記のヒントは、GLFWウィンドウを開く前に設定する必要があります。

于 2013-07-22T19:46:12.977 に答える
0

GL_LINE_SMOOTHまたは何かをするという保証はありませんGL_POLYGON_SMOOTH

それらはコア機能のように見えますが、私の経験では、多くのハードウェアがこれらを実装していません。一貫して実装していないハードウェアは、パフォーマンスに大きな影響を与える可能性があります。OpenGL仕様ドキュメントを見ると、これらはライブラリ全体の優れたリファレンスを提供しますが、仕様の一部ではないため、ここにはこれらの記述はありません。これは、glEnableの仕様を確認することである程度確認できます:khronos.org/opengles/sdk/docs/man/xhtml/glEnable.xml

于 2012-01-18T10:37:10.170 に答える
-1

Nanovgは、OpenGLにレンダリングする2D描画パッケージです。私はこれを通常のOpenGLと一緒に使用して、塗りつぶされたストロークの2Dパスとラインを作成しました。 https://github.com/memononen/nanovg

于 2015-11-30T20:19:16.163 に答える