1

レンダリングされた3Dシーンから(OPENGLを使用して)ポイントクラウドを抽出する方法はありますか?

詳細に:

入力は、レンダリングされた3Dシーンである必要があります。

出力は、たとえば頂点(x、y、z)を持つ3次元配列である必要があります。

ミッションは可能か不可能か?

4

3 に答える 3

2
  • 正投影ビューを使用してシーンをレンダリングし、すべてが一度に画面に収まるようにします。
  • フレームバッファの各サンプルポイントで (X、Y、Z、R、G、B、A) をキャプチャするには、g バッファ (この用語または「ファット ピクセル」または「遅延レンダリング」を検索) を使用します。
  • フレームバッファを読み返し、(X,Y,Z,R,G,B,A) タプルを線形配列の各サンプル ポイントに配置します。

これで、OpenGL を使用して従来のジオメトリからサンプリングされたポイント クラウドができました。GPU からホストへのリードバックは別として、これは非常に高速です。

これをさらに進める:

  • デプス ピーリング (この用語を検索) を使用して、カメラに最も近いサーフェスでサンプルを生成します。
  • いくつかの視点からレンダリングを繰り返し (またはシーンのいくつかの回転に対して) レンダリングを繰り返して、シーンの隅々からフラグメントを確実にキャプチャし、各パスから生成されたポイントを 1 つの大きな線形配列に追加します。
于 2012-04-11T22:37:29.490 に答える
1

入力データを取得し、手動で変換行列とモデルビュー行列を掛けるべきだと思います。そのために OpenGL を使用する必要はありません。ベクトル/行列の計算だけです。

于 2011-11-17T17:46:22.277 に答える
1

私の理解が正しければ、あなたは 3D シーンの最終レンダリング (2D) を分解したいと考えています。一般に、これを行う OpenGL に組み込まれた機能はありません。

ただし、2D 画像を分析して 3D 表現を生成する方法について説明している論文は多数あります。これは、たとえば Microsoft Kinect がある程度行うことです。出発点として、以前の版の SIGGRAPH で発表された論文を見てください。多くの実装では、おそらく GPU (OpenGL、DirectX、CUDA など) を使用して魔法を実行しますが、それだけです。たとえば、オブジェクトの可視エッジを識別するエッジ検出フィルターやヒストグラム関数を GPU で実行できます。

アプリケーション ドメインによっては、ほとんど不可能なことに直面している場合や、形状と頂点を識別するために使用できるショートカットがある場合があります。

編集

OpenGL レンダリングの仕組みについて誤解していると思います。アプリケーションは、ポリゴンと 3D オブジェクトを形成する三角形の頂点を生成し、OpenGL に送信します。次に、OpenGL はこれらのオブジェクトをラスタライズ (つまり、ピクセルに変換) して、特定の視野を持つ特定の視点からの 3D シーンの 2D レンダリングを形成します。頂点の「ポイント クラウド」を取得したいと言うとき、最初にこれらの頂点を作成する責任があるため、何が必要かを理解するのは困難です。

于 2011-11-16T17:54:20.923 に答える