5

ピクセル シェーダーを使用して、任意のユーザー定義の四角形にテクスチャを投影する方法を見つけ出す必要があります。

四角形の 4 辺の座標を受け入れます。

/// <defaultValue>0,0</defaultValue>
float2 TopLeft : register(c0);

/// <defaultValue>1,0</defaultValue>
float2 TopRight : register(c1);

/// <defaultValue>0,1</defaultValue>
float2 BottomLeft : register(c2);

/// <defaultValue>1,1</defaultValue>
float2 BottomRight : register(c3);

いくつかの補間アルゴリズムを試しましたが、うまくいきませんでした。

希望する結果を得るために変更できると思われるサンプルはありますか?

4

2 に答える 2

1

オプション (またはこの.ppt ) を説明する素敵な論文がここにあります。基本的に、クワッド全体でいくつかの重心座標を定義し、指定された頂点値の BC 加重合計としてフラグメント値を補間する必要があります。

申し訳ありませんが、コードはわかりません。最新の三角形指向のハードウェア (voidstar69 の回答を参照) でのクワッドの直接サポートの欠如は、むしろ時代遅れになったことを意味します。

于 2011-10-02T23:43:21.133 に答える
1

ここでの問題は、最新の 3D グラフィックス ハードウェアはすべて、四角形ではなく三角形をラスタライズすることです。したがって、Direct3D または OpenGL に四角形をレンダリングするように要求すると、API は内部的に四角形を 2 つの三角形に分割します。最新のレンダリングはすべてパースペクティブ コレクトであるため、これは通常問題にはなりません。したがって、視聴者は 1 つの四角形と 2 つの三角形の違いを見分けることができません。補間はシームレスになります。

この補間を実行するように API に要求する正しい方法は、テクスチャ座標を頂点ごとのデータとして渡すことです。このデータは、API/ハードウェアによって各ピクセルにわたって補間されます。ピクセル シェーダーは、このピクセル単位のテクスチャ座標にアクセスできます。「プロジェクト」という用語を使用するときは、単に四角形のテクスチャをクワッドにマッピングすることを意味し、テクスチャ プロジェクション (サーフェスにテクスチャを照らすスポットライトのようなもの) を指しているのではないと思います。

ここでの結論は、クワッドのテクスチャ座標をピクセル シェーダーに渡すのは間違ったアプローチです (これが必要な特別な理由がない限り)。

于 2011-10-03T10:25:33.930 に答える