2017-04-25 4 views
0

r[i, j],phi[i, j]theta[i, j](球面座標系の高さマップ)の表面を持っています。大きな3Dサーフェス(10 000 x 10,000ポイント)をプロットするにはどうすればよいですか?

かなり大きいです:約10K x 10Kポイントです。

私は2Dカラーマップ画像(PyQtGraphなど)として簡単にプロットすることができますが、何らかの形でサーフェスとして描画したいと考えています(ラウンドアースの効果を実証するため)。

誰かが既に大きな表面をプロットしていませんか?そして、どうやってそれらに対処しましたか?

+0

100Mポイントは確かに多数です。実際にこのレベルの精度が必要なのは確かですか?なぜですか? – hidefromkgb

+0

さて、AFAIK、一部の3Dエンジンは過度のポイントを省略できますか?完全な精度は、領域がズームインされているときにのみ必要であり、サーフェス全体ではありません。 – Felix

+2

はい。しかし、LODを構築することは、実行時にはほとんど適さないタスクです。 – hidefromkgb

答えて

2

LoDは実装する必要があります。標高データの場合は十分に簡単です。 quadtreesはこの作業に最適です。高品質のフィルタカーネルを使用できます。クォッドツリー内の細分化は幾何学的な系列に従うので、総メモリ要件は元のデータセットの2倍に収束する。

三角球体の場合、いくつかの注意点があります。極点または不連続点はいつも終わります。球面座標を使用するときは、微分曲面要素が縮退する2つの極があります。これは避けたいものです。

より良いアプローチは、キューブの6辺に基づいてマッピングとして球を表現することです。すなわち、キューブの面が所望の解像度に細分され、そのメッシュの各頂点がベース球の表面上に投影されると仮定する。これを行う際には、高さマップデータを実際にキューブマップテクスチャイメージに格納し、フィルタリングされたLoDレベルを持つことができます。頂点シェーダでは、データをサンプリングしてメッシュを置き換えることができます。

メッシュLoDは、さまざまな方法で実装できます。しかし興味深い示唆があります:あなたがサンプリングしたい球に投影するスクリーン空間のグリッドから始めます。そうすることで、実際に可視になる球の一部だけの正確な頂点を生成します。あなたが頂点を置き去りにするので、良い尺度のために余裕を少し追加してください。地平線の上にある頂点は球を見逃します。これらの頂点を正確に水平線にクリップするのは簡単です(二次方程式の根を見つける)。頂点シェーダでこれをすべて実行し、適切な場合にはグリッドを細かくするためにシェーディングシェーディングでシェーディングします。

あなたの10k×10kメッシュ解像度での注意。ディスプレイ解像度が少なくとも20k×20kピクセルのディスプレイに表示されない限り、制限されたディスプレイ解像度は実際にメッシュをサブサンプリングして周波数エイリアシングを発生させます(ナイキスト定理を参照)。

関連する問題