3

GPU ベースのジオメトリ クリップマッピングを実装しようとしていますが、地形に単純な高さマップを適用するのに問題があります。ハイトマップには、サーフェス フォーマットが「シングル」の単純なテクスチャを使用します。Catalinz の XNA ブログからテクスチャを取得しました。

私がやろうとしているのは、頂点ワールド座標でテクスチャから単一の float 値を取得し、その値を頂点の Y 値に適用することです。コード内に適用できる固定グリッドがないため、シェーダーを介して高さマップを適用しています。これまで試したことは、tex2Dlod関数を使用することでしたが、出力がないか、0 の出力があるようです。Direct X バーテックス シェーダーのコードは次のようになります。

float4 worldPos = mul(float4(pos.x,0.0f,pos.y, 1.0f), worldMatrix);
float elevation = tex2Dlod(HeightmapSampler, float4(worldPos.x, worldPos.z,0,0));
worldPos.y = elevation * 128;

HeightmapSamplerハイトマップ テクスチャのポイント ミラー サンプラーはどこにありますか。出力は次のとおりです。実際には標高がありません。

スクリーンショット

そして、これが私が使用している高さマップです:

ハイトマップ

4

1 に答える 1

0

テクスチャ座標がテクセルであることを忘れていたので、テクセルで乗算すると修正されました。

float elevation = tex2Dlod(HeightmapSampler, float4(worldPos.x*texel, worldPos.z*texel,0,0));
于 2012-09-03T12:39:08.437 に答える