5

UDP ソケットを介して 4 次元のポイント データを取得し、そのデータを 6 つの個別の 2D 散布図にプロットするプログラムを C++ で作成しています。たとえば、次元に A、B、C、D という名前を付けると、6 つの 2D プロットは AxB、AxC、AxD、BxC、BxD、および CxD になります。数時間で、プログラムは最大 5 万ポイントを獲得します。

現在、イミディエイト モードを使用して、各ポイントを 1 回プロットしています。描画呼び出しの間にバッファをクリアしないので、以前にプロットされたポイントはバッファがクリアされるまで保持されます。即時モードは遅く、非推奨であるため、この方法には満足していません。ウィンドウのサイズが変更されたときなど、バッファをクリアする必要がある場合、以前にプロットしたデータはすべて失われます。バッファがクリアされた後もデータを永続化できるソリューションを考えたいと思います。さらに、ウィンドウのサイズ変更でもプロットを簡単にスケーリングできると便利です。

座標系ごとに頂点配列 (2 次元) を維持することを考えましたが、それには 6 つの個別の配列が必要であり、4 次元すべての配列を維持するのに 3 倍のメモリが必要です。

私はこれについて正しい方法で考えていますか?この問題の適切な解決策は何ですか?

最終的な目標は、できるだけリアルタイムに近いデータを表示するアプリケーションを作成することです。

編集ポイントが入ってくると1つずつプロットし続け、画面のサイズを変更する必要があるときに画面の画像を取得して、その画像のサイズを変更したバージョンを表示することは可能でしょうか?

4

1 に答える 1

5

頂点バッファ オブジェクトを使用すると、描画するジオメトリをグラフィック カード メモリに直接格納できるため、レンダリング速度が向上します。ただし、あなたの場合、データが常に変化する場合、データが変化するたびに頂点配列オブジェクトを再構築する必要があるため、この方法が即時モードよりも高速かどうかはわかりません。ポイントを追加するだけの場合は、複数の VBO を作成してポイントをグループ化し、新しいグループを作成できるようになるまで、即時モードを使用して最後に受信したポイントをレンダリングできます。たとえば、100054 ポイントを受け取った場合、10000 ポイントの 10 グループを作成し、最後の 54 ポイントを即時モードでレンダリングできます。

メモリの問題に関しては、グラフィック カードの頂点に 4 つの要素を格納することが可能であると思います。その後、頂点のどのコンポーネントをレンダリング座標として使用するかを選択するさまざまな頂点シェーダーを使用できます。この手法を使用すると、メモリ使用量は受信したデータの 2 倍になります。1 つは受信データ用で、もう 1 つは頂点バッファ オブジェクト用です。

于 2011-08-03T16:46:55.380 に答える