2016-07-13 21 views
0

輪郭を撫でて3Dモデルを強調表示するこの古典的な効果を追加する必要があります。たとえば、透明グラデーションではなく、単なるストロークではありません。OpenGL ESで輪郭を描く

enter image description here

は、私は非常に単純で実装が容易なようで、このhereを行う方法を発見しました。彼はモデルの形状を計算するためにステンシルバッファーを使って遊んでいます。そして彼はワイヤーフレームを使ってモデルを描き、ラインの太さが仕事をしています。 これは私の問題、ワイヤーフレームです。 OpenGL ES 2.0を使用しています。つまり、glPolygonModeを使用してレンダーモードをGL_LINEに変更することはできません。

私はここにこだわっている、私はそれを行うための簡単な代替方法を見つけることができない、私は現時点で最も関連性の高いソリューションは、明らかに最も簡単なソリューションではないワイヤフレームレンダリングを実装することです。私のオブジェクトを描画するにはglDrawElementsGL_TRIANGLESをプリミティブとして使用していますが、私はGL_TRIANGLE_STRIPをプリミティブとして使用しようとしましたが、結果は間違いなく正しいものです。

glPolygonModeの欠如をOpenGL ESで回避する方法はありますか?前もって感謝します。

答えて

1

描画OpenGL ES 2のモデルのアウトラインまたは境界線は、あなたが述べた例のように単純ではありません。

方法1: 最も簡単な方法は、複数のパスで行うことです。

ステップ1(シェイプパス):オブジェクトのみをレンダリングし、同じカメラ設定を使用して黒で描画します。他のすべてのピクセルを別の色で描画します。

Cube looks like this

ステップ2(レンダーパス):これは、あなたが実際に本当の色でオブジェクトを描画通常のレンダーパス、です。これはフラグメントのたびに、ShapePassイメージの同じピクセルの色をテストして、近くの8ピクセルのいずれかが色が異なるかどうかを確認する必要があります。近くのピクセルがすべて同じ色である場合、フラグメントは境界線を表しません。そうでない場合は、境界線を描画するために色を追加します。

Cube Rendered with Border

方法2:あなたの単一パスで同様の効果を与えることができ、他の技術があります。同じオブジェクトを2回描くことができます。最初はわずかに1つのカラーでスケールアップされ、その後は実際のカラーで描画されます。

+0

私は、メソッド1を試してみます。実際には非常に良いです。アンチエイリアスのようなフィルターで作業しているからです(そして最後に同じ問題です)。フィルタを変更するだけです。私が見る唯一の問題は、半分の内側/半分の境界線を作成することですが、私の場合は、とにかく気にしません。再度、感謝します。 – Spazz

関連する問題