2015-07-21 74 views
1

我正在開發一個應用程序,它使用Java OpenGL和模型 - 視圖 - 控制器設計模式。任何人都可以提出一種通用機制,通過這種機制,用於渲染特定圖形元素的頂點數組對象可以與此模式一起重用?Model-View-Controller如何適應OpenGL依賴關係?

實施例:說我在我的Model其中提供了關於多個單獨Polygon S的,這是我的View到細分足夠詳細成一束的頂點數組的對象和渲染在GPU上的一些基本信息的數據。 View是否有靈活的模式可以在幀之間重用這些VBO,而不提供Model特定於渲染的數據?

我想我可以創建一個HashMap,您可以爲Polygon獲取適當的渲染數據,但這會降低渲染速度。這是因爲我首先需要遍歷每個需要渲染的Polygon,然後獲取HashMap中的對應值。我可以選擇通過對VBO的引用,但是這明顯違反了設計原理的Model-View-Controller

+0

相關:http://gamedev.stackexchange.com/questions/63912/visitor-pattern-vs-inheritance-for-rendering –

回答

0

是否存在一種靈活的模式,通過該模式,View可以在幀之間重新使用這些VBO,而無需爲模型提供特定於渲染的數據?

Observer pattern。每當模型改變狀態時,它會觸發任何註冊的視圖來指示哪個模型已經改變。然後,視圖可以轉儲其緩存的模型版本,查詢新更改的模型,並(重新)生成它的新表示。

+0

這很接近,但您將如何形成新的表示形式與其相應的來源之間的關聯在模型中?我的意思是,我們是否應該將我們委託給維也納國際中心的數據作爲模型類型數據處理? –

+0

@AlexT:一個HashMap或類似的你建議(鍵入模型引用和存儲OpenGL對象)在視圖中可能會正常工作。 – genpfault

+0

我認爲這可能有點慢。我的意思是,我必須迭代我希望呈現的事物列表,然後從中取出元素以在HashMap中查找。我認爲這會導致在GPU加速的情況下性能相當差。我想出了一種方法,它使用Visitor模式來輕微分離整個HashMap的依賴性,但我開始認爲這是不可避免的。這是MVC的一個大問題,人們說它很不可思議,但它絕對不直觀,並且比簡單的封裝方法慢。 –