2011-06-30 32 views
-2

我有一個簡單的任務:我有10,000個3D框,每個框都有x,y,z,寬度,高度,深度,旋轉和顏色。我想把它們扔進一個3D空間,將其可視化,讓用戶用鼠標穿過它。有沒有簡單的方法把它們放在一起?最簡單的方法可以在3D中可視化10,000個陰影框

+1

你有使用的語言和圖形庫嗎?或者你的問題是關於使用什麼語言和圖形庫? – jball

+0

我沒有任何限制!我可以使用任何。我在尋找建議。 – vy32

+0

我發現這個比較3D遊戲引擎的好名單:http://en.wikibooks.org/wiki/Python_Programming/Game_Programming_in_Python – vy32

回答

3

這樣使用最近的(V 3.2),OpenGL的將是一個簡單的方法:

  • 使具有8個頂點(立方體的角)的陣列,讓他們在單位立方體座標,即從(-1,-1,-1)(1,1,1)
  • 創建vertex buffer object
  • 使用glBufferData獲得您的陣列到頂點緩衝器
  • 綁定頂點緩衝器
  • 創建,設置並綁定任何t你可能希望使用(跳過這個如果你不使用紋理)
  • 創建該應用變換是從「某些源」讀矩陣頂點着色器extures(見下文)根據gl_InstanceID
  • 編譯着色器,鏈接程序,綁定程序
  • 設置實例爲
  • 取決於你用什麼方法來傳達數據變換所有多維數據集實例轉換數據(見下文),你可以在一個借鑑一切批次或批量使用
  • 致電glDrawElementsInstanced數字o f控制count設定爲多要素倍,將適用於一批
  • 如果使用多批次,更新頂點着色器
  • 之間
  • 數據變換適用於除了變換正常MVP的東西

要傳達每立方變換的數據,你有幾種選擇,其中有:

  • uniform buffer objects,你分別有保證最低4096值, 256個4X4矩陣,但可以查詢實際值
  • texture buffer objects,再次你有保證最低65536值,分別爲4096點4X4矩陣(但通常是一些大的多,我的老年卡可以做128,000,000值,你應該查詢實際值)
  • 每個批次手工訂製服,這並不需要任何「緩衝」的東西,但最有可能是有點慢

或者:使用pseudo-instancing將工作,即使在硬件,做不直接支持實例化。它不是很優雅,而且速度稍慢,但它可以完成這項工作。

+0

天哪,這似乎並不容易。 – vy32

+0

那麼,你可以轉換並使用'glRotate'單獨繪製它們。 'glTranslate'和'glDrawElements'。這很容易,但它不能很好地擴展到10000個以上的實例。僞實例(讀取鏈接)仍然比較容易。 – Damon

+0

仍然看起來比我想的要多得多的代碼。我現在正在看Panda3D,並修改了迪斯科燈光演示以顯示10,000個移動球體。但是,我需要弄清楚如何創建自己的盒子,而不是使用加載的球體。所以我想我需要閱讀手冊。這是今晚的項目。我會在完成後發佈代碼。 – vy32