4

glPolygonMode、OpenGL 3.2 以降では、GL_FRONT または GL_BACK を個別に渡すことができません。例 glPolygonMode(GL_FRONT, GL_LINE); 無効な列挙型を生成します: (GL_INVALID_ENUM エラーが生成されました。現在のプロファイルではポリゴン モードが無効になっています。)

誰かがなぜこれが廃止されたのか説明できますか? 両方の面を渡す必要があるのはなぜですか (GL_FRONT_AND_BACK)

ポリゴンの前面を「ライン塗りつぶし」してから、背面を「完全に塗りつぶす」場合はどうすればよいですか?

残念ながら、このリンク ( http://www.opengl.org/sdk/docs/man/xhtml/glPolygonMode.xml ) には、これについて何も言及されていません。少なくとも、なぜそれらが廃止されたのか、またはどのように顔を別の方法で塗りつぶすことができるのかについて言及する必要がありました。

4

1 に答える 1

6

面ごとに異なる塗りつぶしモードが必要な場合は、ポリゴンを 2 回描画して、毎回異なる面をカリングできます。

OpenGL ES から削除されたので、これが OpenGL 3.2 コアに存在することさえ幸運であると考える必要があります。さらに、D3D では、面ごとにポリゴン塗りつぶしモードを指定できませんでした。

実際には、OpenGL 3.2 でジオメトリ シェーダーとフラグメント シェーダーを組み合わせて使用​​することで、非常に高度な独自の塗りつぶしモードを実装できます (サイドごとに実行できます)。プリミティブ アセンブリ パイプラインは現在プログラム可能であるため、専用の固定機能ハードウェアを持たないものの一部を捨てることは理にかなっています (許可された塗りつぶしモードは技術的にはラスター化状態です)。同様に、固定機能のアルファ テストは、フラグメント シェーダーで実行できるようになったため、削除されました。


GL_FRONTと の非推奨GL_BACKが議論されている場所については、これを見つけるためにコア仕様を読む必要があります。

OpenGL 3.2 コア プロファイル- E.2。非推奨および削除された機能 - pp. 332

個別のポリゴン描画モード - PolygonMode の面の値GL_FRONTGL_BACK; どの面がラスタライズされているかに関係なく、ポリゴンは常に同じモードで描画されます。

3.2 コアで廃止されたもののリスト全体を参照すると、サイドごとのラスター化に関連するかなりの数が削除されていることに気付くでしょう。幸いなことに、まだ両面ステンシルがありますが、もちろん、これはステンシル テストがプログラムできないという事実に帰着します。

于 2013-10-30T01:35:27.583 に答える