2011-09-23 13 views
5

Pixel Shaderを使用して任意のユーザ定義四角形にテクスチャを投影する方法を理解するだけでいいです。補間アルゴリズムのカップルを試みたテクスチャを任意の四角形に投影するピクセルシェーダ

/// <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); 

、それが権利を取得するために管理することができませんでした:

は、四角形の四辺の座標を受け入れることでしょう。

あなたが望む結果を得るために修正できる可能性のあるサンプルがありますか?

答えて

1

お客様のオプション(または.ppt)を記載したnice paper hereがあります。基本的に、クワッド全体にいくつかの重心座標を定義し、フラグメント値を与えられた頂点値のBC加重和として補間する必要があります。

申し訳ありませんが、コードは分かりません。現代の三角指向のHW(voidstar69の答えを参照)上のクワッドに対する直接的なサポートの欠如は、彼らがむしろ流行していないことを意味します。

1

ここで問題となるのは、すべての最新の3Dグラフィックスハードウェアが四角形ではなく三角形をラスタライズすることです。したがって、Direct3DまたはOpenGLにクワッドのレンダリングを依頼すると、APIは内部的にクワッドを2つの三角形に分割します。現代のレンダリングはすべて透視補正されているので、これは通常は問題ではないので、1つのクワッドと2つの三角形の違いを見ることはできません。補間はシームレスになります。

この補間を実行するようにAPIに要求する正しい方法は、API /ハードウェアが各ピクセルにわたって補間する頂点ごとのデータとしてテクスチャ座標を渡すことです。これにより、ピクセルシェーダはこのピクセル単位のテクスチャ座標にアクセスできます。私はあなたが「プロジェクト」という言葉を使用するときには四角形のテクスチャを四角形にマッピングするだけで、テクスチャ投影(サーフェス上にテクスチャを輝かせるスポットライトのようなものではありません。

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

+0

これはすべて真ですが、HWの三角形ベースの補間器を完全に回避し、四角形やポリゴン、さらには複雑なものに独自のスキームを定義することもできます。ただし、フットプリントを三角形に分割し、必要な情報(具体的には、ローカル三角形だけでなく、他のすべての頂点の位置と値)をシェーダで調整します。もちろんこれは、HWの専用の三角形補間サポートと比較して、特に効率的な方法ではありませんが、アプリケーションを持たないわけではありません。 – timday

+1

ポスターがHW補間を使用しようとしているか、サイドステップを行っているかを指定していません。私は両方が可能であることに同意する。私は元の質問を明確にし、より詳細を提供する必要があると思います。 – voidstar69

関連する問題