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

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

剛給引擎設備新加了一個函數GetLuaStateOwner();
用于獲取引擎中的lua上下文
看起來似乎沒多大必要但是我有自己的考慮!

另外:我修改了粒子腳本
如下:

  1 
  2 -- 這是蓋莫引擎中使用lua腳本的測試粒子
  3 
  4 -- 定義粒子池粒子個數
  5 max_particles = 5000
  6 
  7 -- 定義粒子初始位置
  8 particle_position = 
  9 
 10    xpos = 0;
 11    ypos = 0;
 12    zpos = 4;
 13 }
 14 
 15 -- 定義粒子大小
 16 particle_size = 0.7
 17 
 18 -- 定義粒子壽命
 19 particle_life = 9
 20 
 21 -- 定義粒子批大小
 22 batch_particles = 100
 23  
 24 friction = 0.75
 25  
 26 fountain_radius = 1.8
 27 particle_r = (fountain_radius + particle_size/2)*(fountain_radius + particle_size/2)
 28  
 29 -- 定義粒子速度
 30 particle_vel = 8.0
 31  
 32 function GetVelByTime(t)
 33     return particle_vel*(0.6 + 0.1*(math.sin(0.5*t)+math.sin(0.31*t)));
 34 end
 35 function InitZVel()
 36     return 0.5 + (0.3/4096.0* (math.random(1,4095));
 37 end
 38 local function GetRandRotXY()
 39     return (2.0*3.14159265/4096.0* math.random(1,4095)
 40 end    
 41 function InitXVel(t)
 42    xy_angle = GetRandRotXY();
 43    vt = GetVelByTime(t);
 44    return 0.4 * math.cos(xy_angle)*vt;
 45 end
 46 function InitYVel(t)
 47    xy_angle = GetRandRotXY();
 48    vt = GetVelByTime(t);
 49    return 0.4 * math.sin(xy_angle)*vt;
 50 end
 51 
 52 -- 粒子位置
 53 xpos = particle_position[xpos];
 54 ypos = particle_position[ypos];
 55 zpos = particle_position[zpos];
 56  
 57 function InitPosition()
 58    xpos = 2*(particle_position.xpos + 1-math.random());
 59    ypos = 3*(particle_position.ypos + 1-math.random());
 60    zpos = particle_position.zpos  + math.random() - 1
 61 end 
 62  
 63 function InitColorRed(t)
 64     return 0.7 + 0.3 * math.sin(0.34*+ 0.1);
 65 end
 66 function InitColorGreen(t)
 67     return 0.6 + 0.4 * math.sin(0.63*+ 1.1);
 68 end
 69 function InitColorBlue(t)
 70     return 0.6 + 0.4 * math.sin(0.91*+ 2.1);
 71 end
 72  
 73 red = 0;
 74 green = 0;
 75 blue = 0;
 76 xvel = 0;
 77 yvel = 0;
 78 zvel = 0;
 79  
 80 function InitParticle(t)
 81    InitPosition(); 
 82    red = InitColorRed(t);
 83    green = InitColorGreen(t);
 84    blue = InitColorBlue(t);
 85    zvel = InitZVel();
 86    xvel = InitXVel(t);
 87    yvel = InitYVel(t);
 88 end
 89  
 90 new_life = 1;
 91 new_xpos = 0;
 92 new_ypos = 0;
 93 new_zpos = 0;
 94 new_xvel = 1;
 95 new_yvel = 1;
 96 new_zvel = 1;
 97 new_red  = 0.2;
 98 new_green = 0.3;
 99 new_blue  = 0.2;
100 
101 
102 -- 更新更新粒子顏色
103 function UpdateColor(red,green,blue)
104    if red > 0.2 or red < 0.2 then
105       red = red - (red - 0.2)*1/99.0;
106       if red > 1 or red < 0 then
107          red = 0.5;
108          new_red = red;
109       end
110    end  
111    new_red = red;   
112    new_green = green;
113    new_blue = blue;            
114 end
115   
116 -- 更新粒子狀態
117 function UpdateParticles(life,xpos,ypos,zpos,xvel,yvel,zvel,dt)
118    -- 修正粒子生命 
119    new_life = life - dt * (1.0 / particle_life);
120    -- 修正粒子速度 
121    new_zvel = zvel;
122    new_xpos = xpos + xvel*dt/8*(math.random()-0.5);
123    new_ypos = ypos + yvel*dt/8*(math.random()-0.5);
124    new_zpos = zpos + new_zvel*dt;        
125 end
126 
127 
128 
在粒子初始化中,我讓粒子的初始位置保持在一個盒子當中,這樣其效果就相當于irr中的粒子盒狀發射器了。
在粒子更新中變動粒子顏色,修改粒子生命和粒子位置,或者粒子速度
其c++代碼如下:
  1 
  2 #include <GEngine/Main.hpp>
  3 #include <luaplus/luaplus.h>
  4 
  5 #define WIN_WIDTH  640
  6 #define WIN_HEIGHT 480
  7  
  8 ////////////////////////////////////////////////////////////
  9 /// 給出一個初始化粒子的方法 
 10 ////////////////////////////////////////////////////////////
 11 void G_CALL InitParticle(core::Particle* p,float t);
 12 
 13 ////////////////////////////////////////////////////////////
 14 /// 更新粒子函數 
 15 ////////////////////////////////////////////////////////////
 16 void G_CALL UpdateParticle(core::Particle* p,float time);
 17 
 18 ////////////////////////////////////////////////////////////
 19 /// 場景旋轉和偏移 
 20 //////////////////////////////////////////////////////////// 
 21 float TransForm(double t);
 22  
 23 ////////////////////////////////////////////////////////////
 24 /// 渲染場景 
 25 //////////////////////////////////////////////////////////// 
 26 void RenderScene(); 
 27 
 28 core::Device* device = NULL; 
 29 
 30 LuaPlus::LuaStateOwner *state = NULL; 
 31   
 32 ////////////////////////////////////////////////////////////
 33 /// 初始化luaplus  
 34 ////////////////////////////////////////////////////////////     
 35 void InitLua(const char* lua)
 36 {    
 37     state = device->GetLuaStateOwner();
 38     // 載入Lua腳本
 39     (*state)->DoFile(lua);  
 40 }  
 41  
 42 ////////////////////////////////////////////////////////////
 43 /// 從腳本載入粒子描述數據 
 44 //////////////////////////////////////////////////////////// 
 45 void LoadData(core::ParticleSystemDesc &desc); 
 46  
 47 int main(int argc, char **argv)
 48 {
 49     int        i;
 50     double     t0, t;
 51     
 52     core::VideoMode mode;
 53     mode.width = WIN_WIDTH;
 54     mode.height = WIN_HEIGHT; 
 55     
 56     device = core::InitDevice("蓋莫引擎粒子系統",false,mode); 
 57     InitLua("..\\script\\particle.lua");
 58     
 59     //! 獲取資源管理器 
 60     core::ResourceManager* resourcemanager = device->GetResourceManager();
 61     core::RefPtr<core::Image> particleimage = resourcemanager->GetImage("particle","..\\image//particle//flare.bmp"); 
 62     core::RefPtr<core::Texture> particletexture = resourcemanager->GetTexture("particle",particleimage); 
 63     particletexture->Bind(); 
 64      
 65     core::ParticleSystemDesc desc;
 66     desc.texture_id = particletexture->GetTextureId();    
 67     desc.init_fn = &InitParticle;
 68     desc.update_fn = &UpdateParticle;
 69     LoadData(desc);
 70     core::ParticleSystem* ps = device->GetParticleSystem(desc); 
 71  
 72     t0 = device->GetTime();
 73     BEGIN_LOOP(device)
 74         t = device->GetTime() - t0;
 75         RenderScene();
 76         float dt = TransForm(t);
 77         ps->Render(); 
 78     END_LOOP(device)
 79     
 80     device->Close();
 81     device->Drop();
 82  
 83     return 0;
 84 }
 85  
 86 ////////////////////////////////////////////////////////////
 87 /// 場景旋轉和偏移 
 88 //////////////////////////////////////////////////////////// 
 89 float TransForm(double t)
 90 {
 91     double xpos, ypos, zpos, angle_x, angle_y, angle_z;
 92     static double t_old = 0.0;
 93     float  dt = (float)(t-t_old);
 94     t_old = t;
 95  
 96     angle_x = 90.0 - 10.0;
 97     angle_y = 10.0 * sin( 0.3 * t );
 98     angle_z = 10.0 * t;
 99     glRotated( -angle_x, 1.00.00.0 );
100     glRotated( -angle_y, 0.01.00.0 );
101     glRotated( -angle_z, 0.00.01.0 );
102  
103     xpos =  15.0 * sin( (M_PI/180.0* angle_z ) +
104              2.0 * sin( (M_PI/180.0* 3.1 * t );
105     ypos = -15.0 * cos( (M_PI/180.0* angle_z ) +
106              2.0 * cos( (M_PI/180.0* 2.9 * t );
107     zpos = 4.0 + 2.0 * cos( (M_PI/180.0* 4.9 * t );
108     glTranslated( -xpos, -ypos, -zpos );
109     return dt; 
110 }
111 
112 void RenderScene()
113 {
114     glViewport( 00, WIN_WIDTH,WIN_HEIGHT);
115     glClearColor( 0.1f0.1f0.1f1.0f );
116     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
117     glMatrixMode( GL_PROJECTION );
118     glLoadIdentity();
119     gluPerspective(65.0640.0/480.01.060.0 );
120     glMatrixMode( GL_MODELVIEW );
121     glLoadIdentity();
122 }
123 
124 ////////////////////////////////////////////////////////////
125 /// 給出一個初始化粒子的方法(t為粒子系統啟動時間(單位:秒)) 
126 ////////////////////////////////////////////////////////////
127 void G_CALL InitParticle(core::Particle* p,float t)
128 {
129     //! 初始化粒子位置位置
130     LuaPlus::LuaFunction<void> initpos(*state,"InitParticle");
131     initpos(t);
132     
133     float xpos =(*state)->GetGlobal("xpos").GetFloat(); //GetByName("xpos").
134     float ypos =(*state)->GetGlobal("ypos").GetFloat();
135     float zpos =(*state)->GetGlobal("zpos").GetFloat();
136     p->position = Vector3f(xpos,ypos,zpos); 
137     
138     //! 初始化粒子顏色 
139     p->color.red = (*state)->GetGlobal("red").GetFloat(); 
140     p->color.green = (*state)->GetGlobal("green").GetFloat();
141     p->color.blue = (*state)->GetGlobal("blue").GetFloat();
142     
143     //! 初始化粒子初始速度 
144     float xvel =(*state)->GetGlobal("xvel").GetFloat();
145     float yvel =(*state)->GetGlobal("yvel").GetFloat();
146     float zvel =(*state)->GetGlobal("zvel").GetFloat();    
147     p->velocity = Vector3f(xvel,yvel,zvel);
148 }
149 
150 ////////////////////////////////////////////////////////////
151 /// 更新粒子函數 
152 ////////////////////////////////////////////////////////////
153 void G_CALL UpdateParticle(core::Particle* p,float time)
154 {
155     LuaPlus::LuaFunction<void> update_fn(*state,"UpdateParticles");  
156     float life = p->life;
157     float xpos = p->position.x;
158     float ypos = p->position.y;
159     float zpos = p->position.z;
160     float xvel = p->velocity.x;
161     float yvel = p->velocity.y;
162     float zvel = p->velocity.z;
163     update_fn(life,xpos,ypos,zpos,xvel,yvel,zvel,time); 
164     
165     //! 獲取更新后的粒子顏色
166     LuaPlus::LuaFunction<void> update_color(*state,"UpdateColor");
167     update_color(p->color.red,p->color.green,p->color.blue);
168     
169     p->color.red = (*state)->GetGlobal("new_red").GetFloat();  
170     p->color.green = (*state)->GetGlobal("new_green").GetFloat();
171     p->color.blue = (*state)->GetGlobal("new_blue").GetFloat();       
172     
173     //! 獲取粒子的更新后數據 
174     p->life = (*state)->GetGlobal("new_life").GetFloat();  
175     p->position.x = (*state)->GetGlobal("new_xpos").GetFloat(); 
176     p->position.y = (*state)->GetGlobal("new_ypos").GetFloat(); 
177     p->position.z = (*state)->GetGlobal("new_zpos").GetFloat(); 
178     p->velocity.x = (*state)->GetGlobal("new_xvel").GetFloat();  
179     p->velocity.y = (*state)->GetGlobal("new_yvel").GetFloat();  
180     p->velocity.z = (*state)->GetGlobal("new_zvel").GetFloat();  
181 
182 
183 ////////////////////////////////////////////////////////////
184 /// 從腳本載入粒子描述數據 
185 //////////////////////////////////////////////////////////// 
186 void LoadData(core::ParticleSystemDesc &desc)
187 {
188     desc.batch_particles = (*state)->GetGlobal("batch_particles").GetInteger();
189     desc.particle_size = (*state)->GetGlobal("particle_size").GetFloat(); 
190     desc.life_span = (*state)->GetGlobal("particle_life").GetFloat(); 
191     int max_particles = (*state)->GetGlobal("max_particles").GetInteger(); 
192     desc.particle_number = max_particles;     
193 }
194 
195 
196 
當然代碼中沒有檢測錯誤和異常.
其輸出圖形如下所示:

另外一幅截圖

看得使用蓋莫游戲引擎設計粒子效果足夠簡單吧
最后上蓋莫引擎的logo(當然這是題外圖O(∩_∩)O~)
posted on 2010-02-25 13:39 ccsdu2009 閱讀(374) 評論(0)  編輯 收藏 引用 所屬分類: Game引擎
 
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            99精品视频一区| 亚洲黄色免费网站| 欧美一区三区三区高中清蜜桃 | 一区二区三区久久精品| 国产色综合网| 国产精品久久网| 国产精品久久夜| 国产精品人成在线观看免费| 欧美日韩在线视频首页| 欧美色123| 欧美日韩一区二区在线视频| 欧美另类一区| 国产亚洲激情视频在线| 国内精品伊人久久久久av影院 | 香港久久久电影| 久久aⅴ国产紧身牛仔裤| 亚洲欧美国产制服动漫| 午夜影视日本亚洲欧洲精品| 欧美伊人久久久久久午夜久久久久 | 在线视频欧美日韩| 99国产精品久久久久久久| 亚洲国产日本| 亚洲在线视频免费观看| 久久av最新网址| 久久精品日产第一区二区三区| 久久中文字幕导航| 欧美精品一区二区三区很污很色的 | 亚洲国产一区二区a毛片| 91久久精品www人人做人人爽| 亚洲成人自拍视频| 午夜视频在线观看一区二区| 欧美在线视频二区| 久久亚洲春色中文字幕久久久| 亚洲国产精品福利| 亚洲视频 欧洲视频| 性欧美大战久久久久久久久| 亚洲伊人久久综合| 今天的高清视频免费播放成人| 亚洲精品视频在线看| 亚洲综合日韩中文字幕v在线| 久久国产精品高清| 免费不卡欧美自拍视频| 国产亚洲一区二区三区| 亚洲日本中文字幕| 亚洲欧美日韩国产中文| 亚洲国产一区二区视频| 亚洲欧美日韩另类精品一区二区三区 | 国产精品久久久久9999| 国产一区二区三区电影在线观看| 亚洲黄色一区| 欧美大片专区| 欧美凹凸一区二区三区视频| 欧美色欧美亚洲另类二区 | 一区二区三区亚洲| 亚洲欧美制服另类日韩| 在线亚洲成人| 国产精品国产福利国产秒拍| 亚洲欧洲日韩综合二区| 亚洲伊人一本大道中文字幕| 亚洲精品在线观| 国产欧美日韩激情| 亚洲婷婷综合久久一本伊一区| 久久激情综合| 激情av一区二区| 亚洲经典视频在线观看| 欧美中文在线字幕| 久久久久久亚洲精品杨幂换脸| 亚洲一区二区三区在线看| 欧美α欧美αv大片| 国产一区二区精品丝袜| 久久精品国产v日韩v亚洲| 日韩午夜电影在线观看| 免费看的黄色欧美网站| 亚洲国产视频a| 免费日韩视频| 久久九九久精品国产免费直播| 亚洲成人在线免费| 久久人体大胆视频| 欧美一区二区三区视频在线观看| 国产又爽又黄的激情精品视频 | 国产精品亚洲网站| 99国产精品久久久| 国语自产精品视频在线看一大j8| 久久久久久网址| 亚洲欧美一区在线| 老司机精品导航| 亚洲成色www8888| 欧美~级网站不卡| 亚洲一区二区精品视频| 伊人男人综合视频网| 欧美永久精品| 亚洲永久免费精品| 欧美激情一区二区三区成人| 亚洲私人黄色宅男| 一区二区三区精品久久久| 久久性色av| 一区二区久久| 亚洲少妇自拍| 韩国视频理论视频久久| 最近中文字幕日韩精品| 欧美日韩国产综合视频在线观看中文 | 亚洲深夜激情| 久久国产日韩欧美| 亚洲国产毛片完整版| 亚洲日韩欧美一区二区在线| 国产伦精品一区二区三区视频黑人| 欧美专区在线播放| 久久久夜精品| 性欧美激情精品| 久久嫩草精品久久久精品| 亚洲人成亚洲人成在线观看图片 | 精品成人一区二区| 亚洲成人在线视频网站| 久久福利电影| 亚洲在线播放电影| 久久久久久久久久看片| 国产一区视频观看| av成人动漫| 在线不卡免费欧美| 亚洲视频免费看| 在线亚洲一区| 久久久综合网| 欧美亚洲一区二区在线| 欧美日韩国产免费观看| 久久久久久久一区二区三区| 欧美成人亚洲成人日韩成人| 另类春色校园亚洲| 欧美三级资源在线| 欧美粗暴jizz性欧美20| 一区二区三区无毛| 亚洲一线二线三线久久久| 国产精品视频一二三| 亚洲欧洲偷拍精品| 国产精品一区久久久| 久久国产精品99久久久久久老狼| 国产欧美日韩不卡| 一本色道久久综合亚洲精品不| 国产欧美精品国产国产专区| 亚洲福利视频免费观看| 欧美日韩一区二区精品| 91久久精品一区| 狠狠色噜噜狠狠狠狠色吗综合| 欧美日韩一区二区三区高清| 一本久久知道综合久久| 久久夜色精品一区| 欧美亚洲日本国产| 欧美日韩在线另类| 亚洲精品国产拍免费91在线| 在线看一区二区| 性欧美18~19sex高清播放| 欧美一区二区免费观在线| 欧美偷拍另类| 国产精品成人国产乱一区| 久久亚洲一区二区| 欧美国产欧美亚州国产日韩mv天天看完整 | 欧美激情精品久久久久久变态| 久久精品伊人| 久久国产精品久久精品国产| 国产精品久久久久国产精品日日| 亚洲三级视频在线观看| 日韩亚洲欧美综合| 欧美高清影院| 亚洲夜间福利| 亚洲欧美日韩精品一区二区| 国产精品海角社区在线观看| 欧美一级大片在线免费观看| 欧美插天视频在线播放| 亚洲色在线视频| 国语自产精品视频在线看一大j8| 免费亚洲视频| 国产日韩欧美二区| 国产精品入口福利| 欧美经典一区二区三区| 亚洲精品综合精品自拍| 欧美一区二区三区另类| 亚洲高清不卡在线| 欧美日在线观看| 久久男人资源视频| 一区二区三区日韩| 你懂的一区二区| 亚洲欧美日韩中文视频| 在线欧美电影| 国产精品专区h在线观看| 欧美顶级大胆免费视频| 欧美一级成年大片在线观看| 日韩视频二区| 欧美成人免费在线| 欧美影院在线| 亚洲一区二区网站| 亚洲欧洲在线一区| 国一区二区在线观看| 国产精品久久久久久久久免费樱桃| 免费日韩成人| 在线亚洲美日韩| 国产精品videosex极品| 亚洲三级影片| 欧美在线视频一区| 一本久久综合亚洲鲁鲁五月天| 国产在线视频不卡二| 国产精品jizz在线观看美国 |