2011-06-30 8 views
-2

私は単純な作業をしています:それぞれx、y、z、幅、高さ、回転、および色を持つ10,000個の3Dボックスがあります。私はそれらを3D空間に投げ込み、視覚化し、マウスを使って飛行させたいと思っています。これをまとめる簡単な方法はありますか?3Dで10,000個の陰影付きボックスを視覚化する最も簡単な方法

+1

使用している言語とグラフィックライブラリがありますか?または、どの言語とグラフィックスライブラリを使用するのですか? – jball

+0

私には制限がありません!私は何かを使うことができます。私は提案を探しています。 – vy32

+0

3Dゲームエンジンを比較したこの良いリストが見つかりました:http://en.wikibooks.org/wiki/Python_Programming/Game_Programming_in_Python – vy32

答えて

3

最近使用してこれを行う1つの簡単な方法は、(V 3.2)OpenGLは次のようになります。

  • 、8つの頂点(立方体の角)との配列を作る彼らは単位立方体上の座標与える、つまり、 (-1、-1、-1)から(1、1、1)
  • 頂点バッファ
  • にあなたの配列を取得するためにvertex buffer object
  • 使用glBufferDataを作成し、頂点バッファ
  • が作成バインド設定し、バインドする(テクスチャを使用しない場合はスキップします)
  • gl_InstanceID
  • の値に従って、「一部のソース」(以下を参照)から読み取られる変換マトリックスを適用する頂点シェーダを作成します。
  • は、シェーダのコンパイルプログラムをリンク、インスタンスがトランスフォームデータを通信するために使用するものの方法に応じて、すべてのキューブインスタンス
  • のために(下記参照)のデータを変換するセットアッププログラム
  • を結合し、1つのすべてを引き出すことができますバッチを使用するか、複数のバッチを使用する。
  • コールglDrawElementsInstancedN番号oなど、多くの要素にcount設定したF回は、あなたがいくつかのバッチを使用する場合、1つのバッチ
  • に収まる頂点シェーダは、通常のMVPのものに加えて、変換
を適用
  • 間で変換データを更新するよう
    • uniform buffer objects

      、あなたはそれぞれ、最低保証 4096の値が設定されています

      は、あなたがそれらの中にある、いくつかの選択肢を持って、毎キューブ変換データを通信するために、 256人の4x4の行列が、あなたは再びあなたが最低保証 65536の値は、それぞれ4096の4x4の行列を持って、実際の値

    • texture buffer objectsを照会することができます(ただし、通常ははるかに大きな何かが、128,000,000の値を行うことができ、私の高齢者のカードは、あなたが照会します実際の値)各バッチについて
    • 手動で設定制服は、これは任意の「バッファ」のものを必要としませんが、多少遅く

    代わりに、おそらくです:さえないハードウェア上で動作します使用pseudo-instancingインスタンス化を直接サポートしません。それはエレガントではなく、非常にわずかに遅いですが、それは仕事をします。

    +0

    ああ、それは簡単ではないようです。 – vy32

    +0

    さて、あなたは 'glRotate'を使って全てを個別に変換して描画することができます。 'glTranslate'、' glDrawElements'です。それは簡単ですが、10,000以上のインスタンスにはうまく適用されません。擬似インスタンス化(リンクを読む)は比較的簡単です。 – Damon

    +0

    私はやっているよりもずっと多くのコードのようです。私は今Panda3Dを見ていて、10,000個の動く球を表示するためにDisco-Lightsデモを修正しました。私は、ロードされる球を使うのではなく、自分の箱を作る方法を理解する必要があります。だから私はマニュアルを読む必要があると思う。それは今夜のプロジェクトです。私が完了したらコードを掲載します。 – vy32

    関連する問題