2012-10-19 41 views
1

我想用的Panda3D我的個人項目,但閱讀文檔和一些示例源代碼後,我仍然有幾個問題:的Panda3D和Python,只渲染一幀等問題

  • 如何我能渲染一個幀並將其保存在文件中嗎? 事實上,我需要渲染2個不同的圖像:單個對象,包含上一個單個對象的多個對象的場景,但每個對象只有一個幀,它們都需要保存爲圖像文件。

  • 該應用程序將使用Python進行編碼,並且需要具有很高的可擴展性(可供數千用戶使用)。 Panda3D會在這裏適合這個法案嗎? (關於我的Python程序,它幾乎是一個不變的複雜性,所以在這裏沒有問題,3D模型將是低聚,每場景約5到20個)。

  • 我需要計算每個物體到相機的透視投影。是否有可能直接訪問頂點和麪(位置,參數等)?

  • 我可以重新着色3D對象嗎?我需要爲整個對象設置一個簡單的顏色,但每個對象的顏色不同。可能嗎?

還請注意,我在圖形和遊戲開發領域頗有新手,但我知道,3D建模和3D理論,以及計算機成像原理的一些位。

謝謝你的閱讀。 PS:我目前的主要選擇是使用Soya3D或PySoy,但它們似乎並沒有被非常積極地開發或優化,所以雖然它們都有較小的內存佔用,但我不知道它們是否會真的比Panda3D中執行得更快,因爲他們不是很優化...

回答

4
  • 可以使用self.win.saveScreenshot(Filename)採取場景的截圖。例如:

    from panda3d.core import Filename 
    
    file_name = Filename('whatever.png')) 
    self.win.saveScreenshot(file_name) 
    
  • 我從來沒有使用過的Panda3D的網絡API自己,但它應該做的客戶端上一份好工作。服務器端的數千用戶的性能可能不盡如人意,但您可以使用其他更適合的技術來編碼服務器軟件,例如C或NodeJS等繁重網絡。

  • 是的,您可以訪問和修改頂點並將它們分組爲面。默認頂點數據允許您設置頂點位置,法線,顏色和紋理座標,但您可以根據需要設置自己的自定義頂點格式。看看手冊:Panda3D Manual: Creating and filling a GeomVertexData

  • 是的,物體顏色可以使用object.setColor(r,g,b,a)設置。更多信息:Panda3D Manual: Tinting and Recoloring

希望它有幫助!

+0

感謝的你,它可以幫助,但我想我應該澄清一下我的應用程序,就是要: - 應該有渲染沒有窗戶,因爲應用程序只意味着是直接渲染場景的圖像。這是後來由另一個應用程序處理的圖像,所以我們不需要任何GUI和窗口。 - 應用程序確實是serverside,所以不應該有任何窗口。 - 我只需要從OBJ文件中獲取加載對象的頂點和麪,而不是設置它們。加載的對象是GeomVertexData的實例嗎? – gaborous

+0

是的,你可以在沒有任何窗口的情況下在後臺運行Panda3D,閱讀OBJ文件(我相信你將不得不將它們轉換成EGG格式)並讀取它的幾何數據。 –

+0

好的,謝謝,我正在閱讀越來越多的手冊,併發布了一個總結,但我仍然無法找到我如何在後臺渲染一個框架! 您能爲我提供最後一條指導嗎? – gaborous

2
  • 您可以使用啓用了setOneShot的緩衝區使其僅渲染單個幀。您可以通過將「窗口類型」PRC變量設置爲「none」,然後自行打開屏幕外緩衝區,從而無需窗口即可啓動Panda3D。 (注意:沒有主窗口的離線緩衝區可能不被普遍支持。) 如果將「窗口類型」設置爲「離屏」,則base.win實際上將是一個緩衝區(可能比您自己設置要容易一些),之後您可以撥打base.graphicsEngine.render_frame()來渲染單個幀,同時避免任務管理器的開銷。你必須調用它兩次,因爲雙緩衝。
  • 是的。 Panda3D被迪斯尼用於他們的一些MMORPG。我不得不補充說熊貓的高級網絡接口記錄不完整。
  • 您可以使用nodepath.get_transform(base.cam)計算從對象到相機的轉換,這是一個TransformState對象,您可以使用ts.get_mat()可選擇將其轉換爲矩陣。這是令人驚訝的快速,因爲Panda維護一個用於轉換的組合緩存,所以這不必多次發生。您可以使用lens.get_projection_mat()或使用lens.get_projection_mat_inv()來獲取投影矩陣(從視圖空間到剪輯空間)。 您也可以使用Geom接口訪問單個頂點數據,這在Panda3D手冊中有詳細描述。
  • 您可以使用set_color更改對象的基本顏色(替換任何頂點顏色),也可以使用set_color_scale爲對象着色,即。應用與現有顏色相乘的顏色。如果您使用燈光並希望爲漫反射,鏡面反射和環境組件使用不同的顏色,則還可以應用Material對象。
+0

謝謝您的詳盡解答,我從來沒有聽說過這些方法!我會盡快嘗試,謝謝先生。 – gaborous