2016-11-13 23 views
0

最新のOpenGLで四角形を描画しようとしていますが、塗りつぶしとストロークを行うシェーダを使用しています。私は、塗りつぶしの色、ストロークの色とストロークの幅を(矩形の位置とサイズとともに)フラグメントシェーダの均一なブロックに送ります。ストローク・フラグメントをストローク・カラーに設定し、フィル・フラグメントをフィル・カラーに設定するための推奨される方法は何ですか?GLSLの2D Rectangleのストローク

現時点では、頭に浮かぶ2つのアイデアがあります。最初に、矩形または矩形ストロークの範囲内にぶれの座標があるかどうかをチェックし、それに基づいて傷の色を設定するif文。このメソッドは非常に複雑なif文を生成し、矩形を回転させるときにはさらに悪化する可能性があります。 (シェーダの分岐は避けるべきだと私は読んだことがあります)

私が持っているもう1つのアイデアは、色を決定するために符号付き距離関数を使用することですが、私はこれらを使用することに慣れていません。彼らはあまりにも鋭いコーナーをしません。

ここのマークはどこですか?おそらくこれを行うためのより良い方法はありますか?

答えて

0

フラグメントシェーダは、ストロークをラスタライズするには遅すぎるステージのように聞こえます。ラスタライズ処理が実行された後に、フラグメントシェーダがの後に実行されます()。私が推薦することができたら、geometry shaderを使って、その場でストロークのジオメトリを生成する方法を検討します。間違いなくVBOにデータを徐々に追加することが最良の解決策です(ストロークの大部分は時間の経過とともに変化しないため)。描画領域の解像度が変わらない場合は、ストロークをテクスチャにレンダリングして修正することもできます。

0

2つの描画呼び出しが必要です.1つは塗りつぶし矩形、もう1つは塗りつぶし矩形です。 また、このライブラリを使用することができます

+0

塗りつぶしで塗りつぶされていないと、ストロークジオメトリの描画呼び出しと残りの塗りつぶしジオメトリの描画呼び出しがありますか?また、私は現時点ではnanovgを使用していますが、私はそれを離れて移動するために自分のライブラリを構築しようとしています。 – user1435899

+0

はい、1つはストローク、もう1つは塗りつぶしです。 独自のライブラリを構築するのは無意味です。バグやポータブルではない解決策がたくさんあります。 MITのライセンスは非常に柔軟性、あなたは簡単に特別な目的のnanovgを改善することができます。また、DirectX、VulkanなどのグラフィックスAPIに簡単に移植できます – quazeeee