3

Cesium では、線形 (または 2D では双線形)、エルミート、ラグランジュなど、いくつかの異なる補間方法が提供されていることを知っています。これらの方法を使用して、ポイントのセットを再サンプリングしたり、サンプリングされたポイントを近似する曲線を作成したりできます。

しかし、私が持っている質問は、Cesiumが 3D シーンをレンダリングしていて、ユーザーがあちこちでズーム/パンしているときに、 Cesium が内部的に使用する方法は何ですか? これは、プログラマーがラスターなどにアクセスできる場合ではないため、すべての途中で補間関数を直接呼び出すことはできません。Cesium は、ユーザーの制御に応じて、可能な限り迅速に独自の処理を行っています。

私の推測では、デフォルトはバイリニアですが、それがわからず、何が使用されているかを明示的に示しているドキュメントを見つけることもできません。さらに、ラグランジュ リサンプリングなど、これらのアクティビティ中にセシウムに特定のリサンプリング方法を強制的に使用させる方法はありますか? 実際、それが私がしなければならないことです: シーンのレンダリング中に Cesium にラグランジュ リサンプリングを強制的に適用させます。任意の提案をいただければ幸いです。

編集: 問題の詳細な説明は次のとおりです…</p>

セシウムを使用して地球の 3D モデルをセットアップし、グレースケール画像チップをモデル地球表面の適切な位置に配置し、その結果をセシウム ウィンドウに表示するとします。視点が地球の表面から十分に離れている場合、ウィンドウのイメージ チップ部分に表示されるピクセル数は、イメージ チップ ソースで使用できる実際のピクセル数よりも少なくなります。ダウンサンプリングが発生します。同様に、ユーザーが繰り返しズームインすると、画像チップ ソース内の実際のピクセル数よりも多くのピクセルが画像チップ全体に表示されるポイントが発生します。アップサンプリングが発生します。一般に、Cesium がピクセル データ ソースを含むフレームを描画するたびに、リサンプリングが発生します。それは最近傍(疑わしい)、線形(おそらく)、立方体、ラグランジュ、エルミート、またはさまざまなリサンプリング手法のいずれか。私の会社では、画質を確保するためにラグランジュ リサンプリングの使用を必要とする大規模な政府プログラムの一部としてセシウムを使用しています。(NGA は、そのプログラムとアナリスト ツールに最適であると判断し、それをコンプライアンス要件にしました。したがって、選択の余地はありません。)

ここに問題があります。ユーザーがモデルとやり取りしている間、たとえばズームインしている間、描画プロセスはプログラマーの制御下にありません。リサンプリングは、Cesium レイヤー自体 (うまくいけば) またはさらに下位のレイヤー (たとえば、Cesium が依存している可能性のある WebGL 関数) で行われます。したがって、このリサンプリングにどの手法が使用されているかはわかりません。さらに悪いことに、その手法がラグランジュでない場合、それを変更する方法がわかりません。

したがって、質問は次のようになります。セシウムは明示的にリサンプリングを行っていますか? もしそうなら、それはどのような技術を使用していますか? そうでない場合、セシウムが画像ファイルをマップにレンダリングするために依存している描画パッケージと関数は何ですか? (これらのレイヤーが使用している可能性のある技術や利用可能な技術を掘り下げて判断することができます。)

4

1 に答える 1

2

更新:うわー、私の最初の答えはあなたの質問を完全に誤解していたので、最初から書き直しました。

新しい編集により、レンダリング中に画面の画像がどのように再サンプリングされるかについての質問があることは明らかです。これらの画像は WebGL のテクスチャ マップであり、それらをすばやく画面に表示するプロセスは、グラフィック カード自体のハードウェアに実装されています。CPU 上のソフトウェアは、個々のピクセルを一度に 1 つずつ画面にマッピングするには十分なパフォーマンスを発揮できません。そのため、ハードウェア アクセラレーション対応の 3D カードを使用しています。

悪いニュースがあります。このハードウェアは、最近傍、線形、およびマップマッピングをサポートしています。それでおしまい。3D グラフィックス カードは、フレーム レートをできるだけ高く保つために一瞬で実行する必要があるため、複雑な補間を使用しません。

マップマッピングは、@gman の記事WebGL 3D Texturesで詳しく説明されています。長い記事ですが、「mipmap」という単語を検索して、彼の説明にスキップしてください。基本的に、単一の画像はレンダリング前に小さな画像に縮小されるため、レンダリング時に適切なサイズの開始点を選択できます。ただし、画面への最終的なマッピングは常に存在し、ご覧のとおり、選択肢は NEAREST または LINEAR です。

ここで@gmanの記事を引用:

各テクスチャのテクスチャ フィルタリングを設定することで、WebGL の動作を選択できます。6つのモードがあります

  • NEAREST= 最大ミップから 1 ピクセルを選択
  • LINEAR= 最大のミップから 4 ピクセルを選択してブレンドする
  • NEAREST_MIPMAP_NEAREST= 最適なミップを選択し、そのミップから 1 つのピクセルを選択します
  • LINEAR_MIPMAP_NEAREST= 最適なミップを選択し、そのミップから 4 ピクセルをブレンドします
  • NEAREST_MIPMAP_LINEAR= 最適な 2 つのミップを選択し、それぞれから 1 ピクセルを選択し、それらをブレンドします
  • LINEAR_MIPMAP_LINEAR= 最適な 2 つのミップを選択します。それぞれから4ピクセルを選択し、それらをブレンドします

私がお伝えできる最高のニュースは、セシウムがそれらの最良のものを使用LINEAR_MIPMAP_LINEARして独自のレンダリングを行うことです。より時間のかかる画像補間が厳密に必要な場合は、リアルタイム レンダリング中にラグランジュ画像補間を行う方法がないため、リアルタイム 3D ハードウェア アクセラレーション グラフィックス カードを使用しないという要件があることを意味します。

于 2015-05-12T18:02:34.830 に答える