0

UV gBuffer を使用してテクスチャ再投影をコーディングしようとしています (これは、そのピクセルでのマッピングに必要な UV 値を含むテクスチャです)

これはこの写真を見るだけでもわかりやすいと思います(評判が悪いので添付できません)

最初の画像 (黒/黄/赤/緑) は UV gBuffer で、UV 値を表し、2 番目の画像は拡散チャネル、3 番目の画像は目的の結果です。

これを OpenGL で作成するのは非常に簡単です。

単純な長方形を描画し、断片化されたシェーダーとして次の疑似コードを使用します。

float2 newUV=texture(UVgbufferTex,gl_TexCoord[0]).xy; float3 finalcolor=texture(DIFFgbufferTex,newUV);

float4(最終色,0)を返します;

OpenGL はミップマップ レベル、異方性フィルタリングなどの選択を処理しますが、通常の CPU プロセスでこれを行うと、最終色のピクセルが 1 つ得られるため、結果が鮮明になります。

ここで何かアドバイスはありますか?一種のミップマップを手動で計算し、隣接するピクセルをチェックしてレベルを選択することについて疑問に思っていましたが、これが正しい方法であるかどうかはわかりません。逆に。

実際、私はこの種のコードを長い間使用していましたが、内部について考えたことはなかったので、これが OpenGL/DirectX で内部的にどのように計算されるかはわかりません。

4

2 に答える 2

1

あなたは正しい軌道に乗っています。

ミップマップ レベルを選択するか、異方性フィルタリングを適用するには、グラデーションが必要です。そのグラデーションは、ラスタライズ後に補間されたすべての変数に対して計算されるため、GL (フラグメント シェーダー) で自然に発生します。頂点シェーダーでミップマップ フィルタリングを使用してテクスチャをサンプリングしようとすると、これはすべて明らかになります。

次のように LOD (ラムダ) を計算できます。

    ρ = 最大 (((du/dx) 2 + (dv/dx) 2 ) 1 / 2 , ((du/dy) 2 + (dv/dy) 2 ) 1 / 2 )

    λ = ログ2 ρ

于 2015-02-05T18:08:10.087 に答える