3

HLSLで記述されたピクセルシェーダーを使用して、三角形のペアに円をレンダリングしたいと思います。ここにはいくつかの擬似コードがありますが、実装中に次々と問題が発生しています。これはWindowsRTで実行されるため、Direct3Dv11APIのDirectX9.3メンバーに制限されています。

シェーダーの一般的な形状は何ですか?たとえば、mainメソッドに渡す必要があるパラメーターは何ですか?

アドバイスや実用的なコードをいただければ幸いです。

4

1 に答える 1

3

パラメトリック円をレンダリングするための入力として、テクスチャ座標を使用する必要があります。

これは、HLSLでレンダリングされた円のアンチエイリアシングについて私が尋ねた質問です。TEXCOORD0これは、より明確にするためにマイナーな変更を加えたその質問のコードです。

float4 PixelShaderFunction(float2 texCoord : TEXCOORD0) : COLOR0
{
    float dist = texCoord.x * texCoord.x
               + texCoord.y * texCoord.y;
    if(dist < 1)
        return float4(0, 0, 0, 1);
    else
        return float4(1, 1, 1, 1);
}

これは、r²=x²+y²である円の式を使用します。これは、半径の2乗の定数1を使用します(つまり、テクスチャ座標で測定された半径1の円)。円の内側のすべてのポイントは黒で、外側のポイントは白で表示されます。

これを使用するには、[-1、1]の範囲のテクスチャ座標を持つ三角形を提供します。従来の[0、1]を使用する場合は、シェーダーで座標をスケーリングおよびオフセットするためのコードを含める必要があります。そうしないと、1/4円になります。

これを起動して実行したら、他の機能を追加するために実験することができます(たとえば、リンクされた質問に従ってアンチエイリアスを実行します)。

于 2013-01-23T07:36:54.843 に答える