我有一個代表3D模型(場景圖)的對象樹。樹節點具有不同的類型(作爲來自公共基類的派生類實現)。例如,有一個表示多邊形的節點,或者一個將座標變換(旋轉,平移)應用到其子節點的節點。這也是一個要求,第三方供應商應該能夠實現新的節點類型,並通過插件(我使用Qt作爲GUI框架)添加它們。因此,編譯時可能存在樹中的節點,其類型未知。在C++場景圖上實現MVC模式
現在我想實現一個類,作爲這個場景圖的視圖。對於每個樹節點類型,視圖必須採取適當的操作(繪製多邊形,變換等)。我的想法是爲每個節點類型實現視圖類,並根據節點類型讓頂級視圖類委派給這些類。 (第三方供應商將能夠實現自己的查看代理類)
所以我的問題是:我如何確定一個節點的性能和可擴展的方式?
我的想法而已:
我可以一個類型標識符添加到每個節點類。這可能只是一個整數(字符串不適合性能方面的原因)。問題在於管理第三方供應商的類型標識符。我怎樣才能確保相同的標識符不用於不同的節點類型(例如不同的供應商)?
我可以實現繪圖代碼,或者直接在節點中直接調用相應的繪圖委託對象。但是我的節點對象最好不知道他們的視圖對象。也不可能給每個節點對象一個專用的視圖對象(我們正在談論成千上萬的節點)。
那麼,你有什麼想法?是否有完全不同的方式來處理這個問題?記住:解決方案不應該要求哈希表查找或其他計算密集型算法,因爲我需要實時繪製圖形。
由於提前, McNumber
謝謝你的答案!在某種遊戲中,這是完全可以接受的。但是我必須開發一個3D-CAD應用程序。該樹用於存儲關於當前編輯模型的實體的所有信息。此外,同樣的樹被用於模擬,測試等。爲這些任務分配不同的樹將是毫無意義的,因爲它們大多是相同的。我明確地想要分離模型(或許是比場景圖更好的詞)和繪圖算法。 – McNumber 2010-11-26 09:03:15