青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Cpper
C/C++高級工程師 Android高級軟件工程師 IT集成工程師 音頻工程師 熟悉c,c++,java,c#,py,js,asp等多種語言 程序猿

引擎中的光照系統(tǒng)是在就存在了的只是感覺一直有點問題,索性重新設(shè)計了.
光照系統(tǒng)的有關(guān)對象和單元有:
渲染基類
RenderBase
對象基類
Object
光描述符
LightDesc
光類
Light
光管理器
LightManager
在引擎中我們認識光是一種資源
所以光管理器是從資源管理器中獲得的也就是:
RefPtr<LightManager> lightmanager  = resourcemanager->GetLightManager();

引擎的光管理器設(shè)計如下:

 1 ////////////////////////////////////////////////////////////
 2 //! 定義引擎光管理器 
 3 //////////////////////////////////////////////////////////// 
 4 class LightManager : public Manager<Light,std::string>public Object  
 5 {        
 6 public:     
 7     ////////////////////////////////////////////////////////
 8     //! 構(gòu)造,析構(gòu)材質(zhì)管理器
 9     //////////////////////////////////////////////////////// 
10     LightManager(){}
11     ~LightManager(){}
12 public:     
13  
14     ////////////////////////////////////////////////////////
15     /// 生成一個新的對象
16     ////////////////////////////////////////////////////////     
17     virtual RefPtr<Light> CreateObject(const std::string& name) = 0
18     virtual RefPtr<Light> CreateObject(const std::string& name, const LightDesc &desc) = 0
19 
20     ////////////////////////////////////////////////////////
21     /// 根據(jù)腳本數(shù)據(jù)生成一個新的光對象 
22     //////////////////////////////////////////////////////// 
23     virtual RefPtr<Light> CreateObject(const std::string& name, const std::string& script, const std::string &key) = 0
24     
25     ////////////////////////////////////////////////////////
26     //! 設(shè)置,獲取全局環(huán)境光
27     ////////////////////////////////////////////////////////     
28     virtual void SetGlobalAmbient(const Color &color) = 0;     
29     virtual void GetGlobalAmbient(Color &color) = 0;   
30     
31     ////////////////////////////////////////////////////////
32     //! 應(yīng)用全局光
33     ////////////////////////////////////////////////////////    
34     virtual void RenderGlobalAmbient(bool use = true= 0;
35     
36     ////////////////////////////////////////////////////////
37     //! 獲取最大支持光源個數(shù)
38     ////////////////////////////////////////////////////////     
39     virtual uint8 GetMaxLightNumber()const = 0
40     
41     ////////////////////////////////////////////////////////
42     //! 啟用,關(guān)閉光源 
43     ////////////////////////////////////////////////////////     
44     virtual void EnableLight() = 0;
45     virtual void DisableLight() = 0;
46     
47     ////////////////////////////////////////////////////////
48     //! 獲檢測是否啟用了光源 
49     ////////////////////////////////////////////////////////      
50     virtual bool IsEnableLight()const = 0;
51     
52     DECLARE_OBJECT(LightManager);
53 };
54 

唯一需要說明的就是
virtual RefPtr<Light> CreateObject(const std::string& name, const std::string& script, const std::string &key) = 0; 
是根據(jù)腳本生成名叫name的光對象
 
再看光類

 1 ////////////////////////////////////////////////////////////
 2 /// 定義光源類
 3 ////////////////////////////////////////////////////////////
 4 class G_DLL_API Light : public RenderBase
 5 {
 6 public:
 7     ////////////////////////////////////////////////////////
 8     /// 構(gòu)造,析構(gòu)光源基類
 9     ////////////////////////////////////////////////////////  
10     Light();
11     Light(const LightDesc &desc); 
12     virtual ~Light(){}    
13 
14     ////////////////////////////////////////////////////////
15     /// 光源類型設(shè)置和獲取
16     ////////////////////////////////////////////////////////     
17     void SetLightType(LightType type){this->type = type;}
18     LightType GetLightType()const{return type;}
19     
20     ////////////////////////////////////////////////////////
21     /// 光源光參數(shù)設(shè)置和獲取
22     //////////////////////////////////////////////////////// 
23     void SetAmbient(const Color &color){ambient = color;}
24     void SetDiffuse(const Color &color){diffuse = color;}
25     void SetSpecular(const Color &color){specular = color;}
26     Color GetAmbient()const{return ambient;}
27     Color GetDiffuse()const{return diffuse;}
28     Color GetSpecular()const{return specular;}
29  
30     ////////////////////////////////////////////////////////
31     /// 光源位置設(shè)置和獲取(對方向性光源無效)
32     ////////////////////////////////////////////////////////
33     void SetPosition(const Vector3f& pos){position = pos;}
34     Vector3f GetPosition()const{return position;}      
35     
36     ////////////////////////////////////////////////////////
37     /// 光衰減因子設(shè)置和獲取(對方向性光源無效)(c,l,q)
38     ////////////////////////////////////////////////////////    
39     void SetAttenuation(const Vector3f &attenuation){this->attenuation = attenuation;}
40     Vector3f GetAttenuation()const{return attenuation;} 
41     
42     ////////////////////////////////////////////////////////
43     /// 聚光燈參數(shù)設(shè)置和獲取(僅僅對聚光燈有效)
44     ////////////////////////////////////////////////////////    
45     ////////////////////////////////////////////////////////
46     /// 聚光燈方向設(shè)置和獲取
47     ////////////////////////////////////////////////////////        
48     void SetSpotLightDirection(const Vector3f &direction){this->spotdirection = direction;} 
49     Vector3f GetSpotLightDirection()const{return spotdirection;}    
50     ////////////////////////////////////////////////////////
51     /// 聚光燈光錐角度設(shè)置和獲取
52     ////////////////////////////////////////////////////////
53     void SetSpotLightAngle(float angle = 180.0f){this->spotangle = angle;}
54     float GetSpotLightAngle()const{return spotangle;}    
55     ////////////////////////////////////////////////////////
56     /// 聚光燈聚光指數(shù)設(shè)置和獲取
57     ////////////////////////////////////////////////////////
58     void SetSpotExponent(float exponent = 0.0f){spotexponent = exponent;}    
59     float GetSpotExponent()const{return spotexponent;}
60 protected
61     Color     ambient,diffuse,specular;  
62     Vector3f  position; 
63     LightType type;    
64      Vector3f  attenuation;
65     
66     //! 聚光燈參變量
67     Vector3f  spotdirection;
68     float     spotangle;
69     float     spotexponent;
70     
71     DECLARE_OBJECT(Light)    
72 };

代碼功能都是很簡單的了,從軟工角度看該類是一個巨類并不符合嚴格的設(shè)計要求O(∩_∩)O~
再看簡單的光配置腳本:
 

 1 -- 這是蓋莫游戲引擎demo中的材質(zhì)配置腳本
 2 -- maker:核動力機器人
 3 
 4 -- 定義一種光屬性
 5 light0 =
 6 {
 7    ambient_red     = 0.4;     
 8    ambient_green   = 0.3
 9    ambient_blue    = 0.2
10    ambient_alpha   = 1.0
11    diffuse_red     = 0.3;
12    diffuse_green   = 0.1;
13    diffuse_blue    = 1.0;
14    diffuse_alpha   = 1.0;   
15    specular_red    = 0.2;
16    specular_green  = 0.3;
17    specular_blue   = 0.2;
18    specular_alpha  = 1.0;
19    -- 0 for 方向性光源
20    -- 1 for 位置性光源
21    -- 2 for 聚光燈
22    light_type      = 0;  
23    position_x      = -10;
24    position_y      = -10;
25    position_z      = -10;
26    -- 光衰減
27    attenuation_x   = 1.0;
28    attenuation_y   = 0.0;
29    attenuation_z   = 0.0;
30    -- 聚光燈聚光方向
31    spot_dirx       = 1;
32    spot_diry       = 1;
33    spot_dirz       = -1;   
34    -- 聚光燈光錐角
35    spot_angle      = 180.0;
36    -- 聚光指數(shù)
37    spot_exponent   = 0.0;
38 };
39  
40 
41 -- 定義一種光屬性
42 light1 =
43 {
44    ambient_red     = 0.5;     
45    ambient_green   = 0.3
46    ambient_blue    = 0.8
47    ambient_alpha   = 1.0
48    diffuse_red     = 0.3;
49    diffuse_green   = 0.1;
50    diffuse_blue    = 0.9;
51    diffuse_alpha   = 1.0;   
52    specular_red    = 1.0;
53    specular_green  = 1.0;
54    specular_blue   = 1.0;
55    specular_alpha  = 1.0;
56    -- 0 for 方向性光源
57    -- 1 for 位置性光源
58    -- 2 for 聚光燈
59    light_type      = 2;  
60    position_x      =  60;
61    position_y      =  60;
62    position_z      =  0;
63    -- 光衰減
64    attenuation_x   = 1.0;
65    attenuation_y   = 0.0;
66    attenuation_z   = 0.0;
67    -- 聚光燈聚光方向
68    spot_dirx       = -1;
69    spot_diry       = -1;
70    spot_dirz       = -1;   
71    -- 聚光燈光錐角
72    spot_angle      = 29.0;
73    -- 聚光指數(shù)
74    spot_exponent   = 0.3;
75 };
76 

當前是采用簡單的lua表顯示配置光的(這樣做的一個原因是我還對lua不太熟悉)

再上一段demo程序和貼圖
(程序很簡單的了只是為了說明問題)
  1 #include <GEngine/Gaimo.hpp>
  2 using namespace std; 
  3 
  4 //! 字體指針和字體初始化
  5 core::RefPtr<core::Text> font;
  6 bool InitFont(core::Device* device); 
  7 
  8 //! 光指針2個
  9 core::RefPtr<core::Light> light[2]; 
 10 
 11 //! 定義燈光控制器 
 12 sigc::signal<void,int,int> light_controller;
 13 //! 按鍵回調(diào)
 14 void LightCallBack(int button,int status);
 15 //! 輸入輸出更新
 16 void UpdateInput(core::Device*); 
 17 
 18 int main(int argc, char **argv)
 19 {
 20     
 21     //! 初始化引擎設(shè)備并得到設(shè)備指針 
 22     core::Device* device = core::InitDevice("蓋莫引擎光照測試"); 
 23     //! 獲取場景管理器指針
 24     core::RefPtr<core::SceneManager> scenemanager = device->GetSceneManager();
 25     //! 獲取攝像機指針
 26     core::RefPtr<core::Camera> camera = scenemanager->GetGlobalCamera(Vector3f(100,100,0),
 27                                                                       Vector3f(),
 28                                                                       Vector3f(0,1,0)); 
 29     //! 設(shè)置攝像機參數(shù) 
 30     camera->SetViewport(0,0,640,480);
 31     camera->SetPerspective(45,640.0f/480.0f,3,300);                                                            
 32     //! 攝像機渲染
 33     camera->Render(); 
 34     
 35     //! 設(shè)置清屏色 
 36     core::Render::SetClearColor(core::Color(0.3f,0.3f,0.6f));
 37     
 38     //! 獲取資源管理器
 39     core::RefPtr<core::ResourceManager> resourcemanager = device->GetResourceManager(); 
 40     
 41     //! 獲取光管理器指針
 42     core::RefPtr<core::LightManager> lightmanager = resourcemanager->GetLightManager();
 43     //! 設(shè)置環(huán)境光參數(shù)
 44     lightmanager->SetGlobalAmbient(core::Color(0.2f,0.2f,0.2f,1.0f)); 
 45     //! 啟用環(huán)境光
 46     lightmanager->RenderGlobalAmbient(true); 
 47     //! 啟用光源
 48     lightmanager->EnableLight(); 
 49     
 50     //! 獲取光指針(2個)
 51     light[0= lightmanager->CreateObject("light1","..\\script//light.lua","light0");
 52     light[1= lightmanager->CreateObject("light2","..\\script//light.lua","light1");
 53 
 54     //! 獲取材質(zhì)管理器
 55     core::RefPtr<core::MaterialManager> materialmanager = resourcemanager->GetMaterialManager();
 56 
 57     //! 獲取一個材質(zhì)指針(我們從腳本中載入材質(zhì)數(shù)據(jù)O(∩_∩)O~) 
 58     core::RefPtr<core::RenderBase> material = materialmanager->CreateObject("material","..\\script//material.lua","material"); 
 59 
 60     //! 字體初始化
 61     bool flag = InitFont(device); 
 62     if(flag == false)
 63     {
 64         ShowMessage(初始化字體失敗)        
 65         device->Close();
 66         device->Drop();
 67         return -1;     
 68     }
 69     
 70     GLUquadric* obj = gluNewQuadric();   
 71 
 72     material->Enable();
 73     material->Render();     
 74     
 75     glDepthFunc(GL_LESS); 
 76     glEnable(GL_DEPTH_TEST);    
 77  
 78     light_controller.connect(sigc::ptr_fun(&LightCallBack));    
 79     
 80     int fps;
 81     char text[255];
 82     BEGIN_LOOP(device)
 83        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);    
 84        fps = device->GetFPS();
 85        sprintf(text,"fps is: %d",fps);         
 86        font->Render(540,0,text);
 87        light[0]->Render();
 88        light[1]->Render();
 89        UpdateInput(device); 
 90        gluSphere(obj,16,100,100);
 91     END_LOOP(device)
 92     
 93     gluDeleteQuadric(obj);
 94    
 95     device->Close();
 96     device->Drop();
 97  
 98     return 0;
 99 }
100  
101 bool InitFont(core::Device* device)
102 {
103     //! 獲取文件系統(tǒng)指針 
104     core::RefPtr<core::FileSystem> filesystem = device->GetFileSystem(); 
105 
106     filesystem->AddToSearchPath("..\\font\\font.zip");
107     bool flag = filesystem->IsExists("accid.ttf");
108     if(flag == false)
109     {    
110         return false;
111     }      
112     
113     //! 讀取文件數(shù)據(jù)
114     core::RefPtr<core::ReadFile> file = filesystem->OpenRead("accid.ttf"); 
115 
116     //! 使用給定字體文件(ttf) 
117     font = device->GetResourceManager()->GetText("newfont",file,18);      
118     
119     (*device->GetLuaStateOwner())->DoFile("..\\script//light.lua");
120     
121     return true
122 }
123  
124 //! 按鍵回調(diào)
125 void LightCallBack(int button1,int button2)
126 {
127     static int l1 =0;
128     static int l2 = 0
129     
130     //! 如果鼠標左鍵被按下(鼠標左鍵控制燈光1) 
131     if(button1 == MOUSE_BUTTON_LEFT)     
132     {   
133         if(l1 % 2 == 0)
134         {    
135              font->Render(10,10,"light1 is off");
136              light[0]->Disable();                
137         }
138         else
139         {
140              font->Render(10,10,"light1 is on");
141              light[0]->Enable();                    
142         }       
143         l1 ++;
144     }    
145     //! 如果鼠標右鍵被按下(鼠標右鍵控制燈光2) 
146     if(button2 == MOUSE_BUTTON_RIGHT)     
147     {   
148         if(l2 % 2 == 0)
149         {    
150              light[1]->Disable();                
151         }
152         else
153         {
154              light[1]->Enable();                    
155         }       
156         l2 ++;
157     } 
158     
159     if(light[0]->IsEnable())
160         font->Render(10,10,"light1 is on");
161     else  
162         font->Render(10,10,"light1 is off");  
163     if(light[1]->IsEnable())
164         font->Render(10,35,"light2 is on");
165     else  
166         font->Render(10,35,"light2 is off");                        
167 }
168 
169 void UpdateInput(core::Device* device)
170 {
171     core::RefPtr<core::Input> input = device->GetInput();
172     if(input->IsPressedMouse(MOUSE_BUTTON_LEFT) == true)
173     {
174         light_controller.emit(MOUSE_BUTTON_LEFT,MOUSE_BUTTON_LEFT);                                            
175     }
176     else if(input->IsPressedMouse(MOUSE_BUTTON_RIGHT) == true)                                  
177     {
178         light_controller.emit(MOUSE_BUTTON_RIGHT,MOUSE_BUTTON_RIGHT);                                                  
179     }
180     else
181     {
182         light_controller.emit(MOUSE_BUTTON_MIDDLE,MOUSE_BUTTON_MIDDLE);               
183     }
184 }
185 
186 
187  
188  
189 

下面是其貼圖(截屏的程序fps總是有點偏低)
posted on 2010-03-10 15:31 ccsdu2009 閱讀(1312) 評論(0)  編輯 收藏 引用

只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


 
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            一区二区日韩欧美| 欧美日本网站| 久久亚洲影音av资源网| 亚洲人体大胆视频| 国产视频在线一区二区| 欧美精品免费在线观看| 欧美国产亚洲另类动漫| 校园春色国产精品| 欧美亚洲一区二区三区| 欧美在线视频在线播放完整版免费观看 | 久热综合在线亚洲精品| 久久在线观看视频| 久久精品人人做人人爽| 欧美日本中文字幕| 久久在线91| 欧美久久久久久| 国产美女诱惑一区二区| 狠狠色狠狠色综合日日五| 亚洲国产视频直播| 亚洲免费视频成人| 久色婷婷小香蕉久久| 亚洲私人影吧| 亚洲高清精品中出| 日韩视频二区| 久久综合婷婷| 好吊日精品视频| 亚洲午夜在线| 亚洲破处大片| 久久视频在线看| 国产乱码精品一区二区三| av成人国产| 亚洲高清视频在线| 久久夜色精品国产欧美乱| 欧美性一区二区| 亚洲摸下面视频| 一区二区三区欧美日韩| 欧美大尺度在线观看| 欧美国产精品日韩| 一本色道久久综合亚洲二区三区| 久久九九精品99国产精品| 日韩午夜视频在线观看| 欧美视频免费在线| 亚洲精选在线观看| 亚洲国产合集| 欧美高清视频| 国产精品成人一区二区三区吃奶| 久久裸体艺术| 亚洲精品国产品国语在线app| 欧美.日韩.国产.一区.二区| 性做久久久久久| 亚洲精品系列| 欧美中文字幕第一页| 欧美成人精品高清在线播放| 久久一二三国产| 亚洲精品一区在线观看| 亚洲欧美激情一区| 欲色影视综合吧| 亚洲午夜性刺激影院| 国产一区二区丝袜高跟鞋图片 | 国产精品私房写真福利视频 | 欧美成人性网| 亚洲视频在线一区| 性欧美精品高清| 亚洲人午夜精品| 欧美怡红院视频一区二区三区| 韩国成人福利片在线播放| 亚洲九九爱视频| 亚洲日韩欧美视频一区| 亚洲一区精彩视频| 亚洲性视频h| 欧美国产欧美亚州国产日韩mv天天看完整 | 亚洲作爱视频| 玖玖玖国产精品| 欧美成人国产va精品日本一级| 亚洲国产精品美女| 一区二区三区我不卡| 午夜国产欧美理论在线播放| 国产精品99久久久久久人| 另类尿喷潮videofree| 亚洲欧美日韩综合| 欧美日韩免费区域视频在线观看| 欧美日韩中文字幕在线| 亚洲精品一区二区三区不| 亚洲毛片在线观看.| 免费高清在线视频一区·| 欧美黄免费看| 亚洲视频一区| 激情五月***国产精品| 久久一区二区三区国产精品 | 亚洲精品国产精品乱码不99| 欧美伦理一区二区| 亚洲人成欧美中文字幕| 亚洲欧美激情视频| 激情成人综合网| 欧美激情一区二区三区蜜桃视频 | 99综合电影在线视频| 欧美日韩免费在线视频| 欧美在线视频一区二区| 亚洲精品国产日韩| 美女黄色成人网| 午夜性色一区二区三区免费视频| 国模 一区 二区 三区| 欧美理论电影在线播放| 久久国产乱子精品免费女 | 亚洲经典视频在线观看| 中文成人激情娱乐网| 亚洲观看高清完整版在线观看| 久久嫩草精品久久久精品一| 亚洲人体大胆视频| 久久久久久久久岛国免费| 欧美一区在线看| 亚洲欧美日韩综合aⅴ视频| 99国产精品久久| 亚洲国产精品视频| 欧美肉体xxxx裸体137大胆| 米奇777在线欧美播放| 欧美在线亚洲在线| 欧美在线视频a| 中日韩美女免费视频网址在线观看| 91久久精品一区二区别| 亚洲第一中文字幕| 亚洲精品免费在线播放| 亚洲国产欧美一区二区三区久久 | 夜夜嗨av一区二区三区网站四季av | 欧美有码在线视频| 欧美亚洲尤物久久| 久久九九免费视频| 久久成人亚洲| 欧美国产另类| 妖精成人www高清在线观看| 亚洲午夜一二三区视频| 性色av一区二区三区在线观看| 久久精品一区二区三区四区| 免费观看成人鲁鲁鲁鲁鲁视频| 欧美日韩成人精品| 国产欧美一区二区精品仙草咪| 国产一区二区三区最好精华液| 亚洲国产欧美国产综合一区| 欧美特黄a级高清免费大片a级| 国产视频观看一区| 日韩一级精品| 免费观看日韩| 欧美一进一出视频| 欧美天堂在线观看| 欧美成人性网| 久久国产一区二区| 国产欧美日韩综合一区在线观看| 久久综合狠狠| 新67194成人永久网站| 欧美日韩成人激情| 亚洲精品在线看| 最新成人av在线| 久久夜色精品国产欧美乱极品| 亚洲综合电影一区二区三区| 久久婷婷av| 亚洲欧洲另类| 欧美国产另类| 欧美激情视频免费观看| 亚洲激情成人在线| 亚洲一区视频| 亚洲女人天堂成人av在线| 欧美日韩国产a| 亚洲综合另类| 亚洲女女女同性video| 国产精品一区二区久久| 久久激情网站| 欧美激情免费在线| 欧美一级二区| 久久成人综合网| 亚洲欧洲在线观看| 亚洲黄色尤物视频| 欧美日产国产成人免费图片| 99精品视频免费观看| 亚洲理伦在线| 国产欧美日韩视频一区二区三区| 夜夜嗨av一区二区三区中文字幕| 亚洲欧洲日本在线| 欧美日韩伊人| 久久一区二区精品| 欧美成人午夜视频| 久久久久国产精品www| 美女视频一区免费观看| 国产精品一区免费视频| 欧美成人按摩| 99视频一区二区| 亚洲欧美日韩成人| 伊人成人在线| 日韩亚洲在线观看| 精品动漫3d一区二区三区免费| 最新中文字幕亚洲| 1769国产精品| 久久蜜桃av一区精品变态类天堂| 久久精品亚洲乱码伦伦中文 | 欧美日韩精品在线视频| 亚洲在线网站| 欧美屁股在线| 亚洲国产成人tv| 韩日欧美一区二区三区| 亚洲免费视频中文字幕| 欧美在线播放视频|