1

ゲームEchochromeのように、サーフェスのエッジ (ポリゴンではなく!) を描画できるシェーダーのセットを作成しようとしています。

グラフィックス プログラミングで覚えていることによると、これを行うためのテクニックは、マルチパス レンダリングを作成することです。最初のパスでは、面の法線ベクトルと深度を RGBA カラーとしてエンコードし、これらをテクスチャに描画する必要があります。2 番目のパスでは、テクスチャ内の値を検索し、現在のフラグメントの法線または深度情報が周囲のテクセルの法線または深度と大幅に異なる場合、エッジを描画する必要があります。

(注:これを行う簡単な方法があれば、特にFlashで簡単にできる場合は教えてください。ただし、私の具体的な質問は次のとおりです。)

最初のパスのプログラミングで問題が発生しました。DirectX 9.0c を使用した 3D ゲーム プログラミングの紹介 で読んだことから:フランク D. ルナによるシェーダー アプローチ、法線ベクトルを「補間」する正しい方法は、三角形の頂点の法線ベクトルを平均してから、それを使用することです。表面上のすべてのフラグメントの値。ただし、私のフラグメント シェーダーは代わりに法線ベクトルを補間しているため、サーフェスの単色ではなくグラデーションが描画されます。

補間の代わりに AGAL に必要な平均化を行わせるにはどうすればよいですか?

4

1 に答える 1

1

各三角形に独自の 3 つの頂点があり、他の三角形と共有されないように、頂点を複製する必要があると思います。三角形の各頂点の法線は、平均化された法線である必要があります。三角形の 3 つの法線はすべて同じであるため、補間値は変化しません。これが理想的ではないことはわかっていますが、他の解決策はありません。

OpenGL では、ジオメトリ シェーダーで平均化された法線を計算するか、「フラット」修飾子を使用して法線が補間されないようにすることができますが、AGAL ではこれらのいずれも実行できないと思います。

詳細については、この質問/回答を参照してください。

于 2013-02-06T14:17:52.410 に答える