2

AGALforStage3Dで作成したシェーダープログラムを使用してワイヤーフレームエフェクトを作成したいと思います。

私はグーグルをしていて、頂点プログラムを介してフラグメントプログラムに渡される重心座標(BC)を使用して、ピクセルが三角形のエッジにどれだけ近いかを判断し、十分に近い場合はそれに応じて色を付けることができることを理解しています。

私の混乱は、この情報をシェーダープログラムに渡すためにどの方法を使用するかということです。立方体、8つの頂点、およびそれらを使用する間に三角形を描画するためのインデックスバッファを設定した簡単な例があります。

BCを頂点バッファーに配置する場合、レンダリングされる三角形に応じて異なる必要があるため、それは意味がありません。たとえば、Vetex1はVetex2とVetex3でレンダリングされる場合は(1,0,0)が必要になる場合がありますが、Vetex5とVetex6でレンダリングされる場合は別の値が必要になります。おそらく私はその方法を完全には理解していません。

頂点の位置を複製し、追加のデータを頂点バッファーに追加する必要がありますか?基本的に、三角形ごとに3つの頂点を作成し、頂点の数を3倍にしますか?頂点に常に(1,0,0)、(0,1,0)、または(0,0,1)の値を与えるのですか、それとも単なる例ですか?私はこれを複雑にしすぎていますか?シェーダーとStage3dでワイヤーフレームを行う簡単な方法はありますか?

それが私の問題を完全に説明することを願っています。答えは大歓迎です、ありがとう!

4

2 に答える 2

3

それはすべてあなたの幾何学に依存します、そしてこの問題は実際にはグラフの頂点の色付けの問題です:あなたはあなたの幾何学グラフが3色である必要があります。良い出発点はウィキペディアの記事です。

たとえば、(1, 0, 0)基底ベクトルが赤、(0, 1, 0)緑、(0, 0, 1)青であると仮定します。次の基本要素を使用してジオメトリを構築する場合は明らかです

基本的なグラフ要素

その場合、そのようなグラフは3色になります(つまり、各エッジ、つまり各三角形の頂点の色が異なるため)、頂点の重複を避けることができます。この基本要素は任意の方向に並べて表示でき、グラフは3色のままになります。

タイリングの例

于 2013-02-06T16:27:01.983 に答える
1

あなたはAGAL/Stage3Dについて私を狂わせるものに出くわしました。APIの制限により、多くの状況で共有頂点を使用できません。ワイヤーフレームレンダリングは、物事が崩壊する1つの例ですが、単純なフラットシェーディングも別の例です。行う必要があるのは、メッシュ内の三角形ごとに3つの一意の頂点を作成することです。頂点ごとに、追加のパラメータを追加します(または、ワイヤフレームをシェーディングする可能性が低いため、頂点法線を受け入れてそれらを再利用するようにエンジンを設計します)。

各三角形に単位ベクトルA[1,0,0]、B [0,1,0]、またはC[0,0,1]をそれぞれ割り当てます。これで始められます。明らかな解決策(フラグメントシェーダーでのしきい値処理と条件付きでピクセルの描画)は、かなり醜いエイリアス結果を生成することに注意してください。フラグメントプログラムでレンダリングされたワイヤーフレームをアンチエイリアスするためのテクニックに関する洞察については、このページを確認してください。

http://cgg-journal.com/2008-2/06/index.html

前述したように、フラットシェーディングを実装する場合は、同様の手法(三角形ごとに一意の頂点)を使用する必要があります。GL_FLATに相当するものはなく、変化するレジスタに平均を返す方法がないため、フラットシェーディングを実装する唯一の方法は、特定の三角形の各頂点パスで同じ照明を計算することです...これは、各頂点に同じ頂点法線。

于 2013-01-19T09:56:03.933 に答える