滑らかな地形レンダリング


7

Direct3Dで滑らかな地形をレンダリングしようとしています。すべてのy値が0の50 * 50グリッドと、グリッド上の位置と「谷」または「丘」の深さまたは高さを示す一連の3Dポイントがあります。各3Dポイントにどれだけ近いかによって、グリッドの頂点のy値を高くしたり低くしたりする必要があります。したがって、最終的にはスムーズなテレインレンダラーが必要です。

どうすればいいのかよくわかりません。次の基本的な式を使用して、各ポイントまでの距離に基づいて頂点の高さを変更してみました。

dist = sqrt(a² + b² + c²)

ここで、a、b、cは、頂点から3D点までのx、y、z距離です。私がこれで得た結果はまったくスムーズではありません。

おそらくもっと良い方法があると思います。

ここに私が今持っているもののスクリーンショットがあります:https : //dl.dropbox.com/u/2562049/terrain.jpg


1
一つには、あなたが与えた公式は距離ではなく距離の二乗である。あるはずです$dist = \sqrt{a^2 + b^2 + c^2}$
ジェームズキング

2
スクリーンショットが壊れています。imgurか何かにアップロードすることをお勧めします。
テトラッド2011

回答:


4

ハイトマップをレンダリングしようとしているように見えるので、これらの3Dポイントについて何か特別なものはありますか?任意の数の3Dポイントに対して一連の距離計算を行うことは、そのための最良の方法ではありません。

これは、ハイトマップのレンダリングに関する簡単なDX9チュートリアルです。

基本的な概念は、変位を表す2D画像があるということです。したがって、ピクセル(X、Y)の位置は頂点(X、Z)に対応し、ピクセルの色は頂点の高さの値(Y)を表します。

画像を使用することの良い点は、開発者が地形を視覚的に作成または変更することが非常に直感的であることです。

編集:スクリーンショットを見てください。効果があるようですが、効果の低下に満足していないと思いますか?地面レベルで滑らかにしてから、3Dポイントでスパイクします。

山/谷のいずれかを2Dで想像して半分にカットすると、左側のような曲線が表示され、右側のような曲線が必要になると思います。

代替テキスト

3Dポイントまでの3D距離を探す代わりに、高さを無視して2D距離を調べることをお勧めします。次に、所定のフォールオフ内のすべての頂点について、イーズイン/イーズアウトカーブに基づいて頂点に高さを適用します。


いいえ、私は高さマップをレンダリングしていません。いくつかの「高さポイント」があります。それらは、丘または谷の上部がどこにあるかを示しますが、各頂点に1つの高さの値はありません。スクリーンショットを投稿しました。
dotminic 2010

ええ、AS3トゥイーンエンジンのQuarticカーブを使用して、この質問を投稿した後、私は自分でそれを整理しました。私はまだ所定のフォールオフを見逃していた。あなたの助けをたくさんありがとう。
dotminic 2010

2

なだらかな起伏のある丘を作成したい場合は、ボックスフィルタリング方法を使用できます。ただし、鋭いクリフエッジが必要な場合は、このメソッドはそれらを滑らかにします。

GameDev.netへのリンクは次のとおりです。スムーズローリングヒルズのボックスフィルタリング

コードは高さマップを使用していることを前提としていますが、ソリューションから行う簡単な変更は、3Dポイントのリストを反復処理することです(今行っているように、3Dポイントを適切な頂点にマッピングします)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.