2013-02-17 74 views
1

讓說,在這個例子中,我有世界類。世界的模式集合:管理HLSL效果

class World 
{ 
    public: 
     map<string, Model*> Models; 
}; 

模式將是在應用程序的所有實體抽象類,例如汽車,球,高山或立方體。

,問題是 - 什麼是用於管理該模型效果最好的做法。假設我有4個效果文件:base1.fx,base2.fx,base3.fx,bas4.fx。他們每個人都有類接口,這可能會被綁定到(IBaseEffect1,IBaseEffect2,IBaseEffect3,IBaseEffect4)模型。

現在,我應該考慮各自獨立的模型,並做一些事情,如:

Cube1.Bind(IBaseEffect2); 
Car.Bind(IBaseEffect3); 

凡模型將不得不管理作用的能力,所以我會做:

World::Render() 
{ 
    foreach model -> Render(); 
} 

這是實際的解決方案爲我的引擎。

或者更好的是管理的影響獨立的,這樣做:

IBaseEffect1.SetAsActual(); 

foreach Model which should be considered for effect1 -> Render(); 

IBaseEffect2.SetAsActual(); 

foreach Model which should be considered for effect2 -> Render(); 

等等

也許是我整個的觀點是錯誤的,應該由其他辦法嗎?

回答

2

我認爲你應該使用您的兩個方法。那就是:

  1. 每個模型已經得到了它自己的作用勢必:model->Bind(effect);
  2. 需要單獨管理的影響(出於效率的考慮):由效應
    1. 排序模型,他們使用
    2. 對於每一種效果:
      • 設置效果
      • 渲染當前效果相關聯的所有車型
      • 其具有以固定的順序被呈現210

模型(例如透明對象)應該以不同的方式處理,除非它們都具有相同的效果。

+0

這就是我所期望的。感謝您的確認和答覆 – 2013-02-20 16:57:21