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

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>
            亚洲成人资源网| 亚洲日韩中文字幕在线播放| 欧美一级理论性理论a| 另类专区欧美制服同性| 亚洲视频精选| 欧美日韩综合另类| 夜夜嗨av一区二区三区四区| 欧美黄免费看| 久久久久久午夜| 国产综合色在线| 久久久久国产一区二区三区| 午夜视频在线观看一区二区三区| 国产精品拍天天在线| 亚洲一区免费看| 在线午夜精品| 国产麻豆9l精品三级站| 久久gogo国模啪啪人体图| 亚洲自拍偷拍麻豆| 国产欧美一区二区精品婷婷| 午夜精品偷拍| 亚洲欧美日韩视频一区| 国产婷婷色一区二区三区| 久久精品人人做人人综合| 欧美伊人影院| 亚洲福利在线看| 亚洲高清免费在线| 中文欧美字幕免费| 国产免费亚洲高清| 久久成人羞羞网站| 久久久久久亚洲精品不卡4k岛国| 国产综合欧美| 欧美成人国产一区二区 | 国产精品性做久久久久久| 亚洲中午字幕| 亚洲欧美日韩精品在线| 精品成人久久| 亚洲国产专区校园欧美| 国产精品久久久久毛片大屁完整版 | 欧美在线看片| 亚洲国产日韩欧美在线动漫| 亚洲国产精品成人一区二区| 久久免费精品日本久久中文字幕| 亚洲一区免费看| 国产精品一区二区三区久久久| 欧美一区二区三区四区在线观看| 欧美一区二区三区在线观看视频| 黄色欧美日韩| 亚洲黄色三级| 国产欧美一区二区在线观看| 欧美成人国产| 国产精品福利影院| 欧美va天堂va视频va在线| 欧美精品1区| 欧美有码视频| 欧美二区不卡| 久久精品夜色噜噜亚洲aⅴ| 欧美成人中文字幕| 午夜欧美精品| 欧美成人午夜剧场免费观看| 欧美一区二视频| 欧美激情导航| 久久久久国产成人精品亚洲午夜| 欧美国产精品劲爆| 老司机午夜精品视频| 国产精品va在线播放| 美女亚洲精品| 久久久99久久精品女同性| 中文日韩电影网站| 久久人人爽爽爽人久久久| 亚洲一区二区少妇| 蜜臀99久久精品久久久久久软件| 欧美亚洲午夜视频在线观看| 欧美人体xx| 欧美成年人视频| 国产色综合久久| 一区二区三区国产精品| 亚洲欧美美女| 一区二区三区视频观看| 另类欧美日韩国产在线| 久久丁香综合五月国产三级网站| 欧美日韩亚洲在线| 亚洲精品四区| 99热这里只有精品8| 久热re这里精品视频在线6| 久久综合色8888| 国产亚洲高清视频| 午夜精品久久久久久久| 午夜精品三级视频福利| 国产精品免费一区二区三区观看| 99国产麻豆精品| 亚洲在线视频| 国产精品家教| 一区二区日韩| 午夜视频在线观看一区| 国产精品日韩二区| 亚洲欧美日韩网| 久久久99精品免费观看不卡| 国产一区视频在线看| 久久久久国产一区二区三区| 麻豆精品网站| 亚洲人午夜精品| 欧美精品一区在线观看| 亚洲精品在线一区二区| 亚洲伊人一本大道中文字幕| 国产精品免费网站| 性伦欧美刺激片在线观看| 久久久久综合网| 日韩午夜av| 久久精品国产精品亚洲| 欧美午夜一区| 亚洲一区二区在线视频| 亚洲综合成人婷婷小说| 国产精品亚洲综合天堂夜夜| 亚洲免费中文字幕| 欧美一二区视频| 韩国三级电影一区二区| 免费在线成人av| 欧美激情精品久久久久久| 99在线热播精品免费99热| 欧美日本韩国一区| 亚洲欧美综合国产精品一区| 欧美一区二区在线免费播放| 亚洲电影在线看| 欧美成人69av| 亚洲一区二区三区四区在线观看 | 亚洲午夜激情| 欧美日韩免费一区二区三区视频 | 国产精品美女久久久久久2018 | 亚洲国产欧美国产综合一区 | 亚洲国产成人精品女人久久久 | 亚洲一区二区精品| 国产欧美日韩亚洲精品| 久久se精品一区二区| 亚洲区一区二区三区| 一区二区三区.www| 国产在线高清精品| 久久综合九色综合网站| 亚洲午夜久久久| 一本色道久久综合亚洲91| 国产欧美一区二区精品婷婷| 亚洲区欧美区| 久久久久久久网站| 亚洲图片在线| 午夜精品影院在线观看| 欧美一二三区在线观看| 亚洲深爱激情| 国产一级一区二区| 欧美成人乱码一区二区三区| 一本久久a久久精品亚洲| 男人插女人欧美| 亚洲视频在线看| 亚洲国产日韩一级| 国产偷久久久精品专区| 免费在线成人av| 久久久www| 一区二区三区高清不卡| 亚洲激情综合| 久久精品欧美日韩精品| 亚洲欧美成人精品| 尤妮丝一区二区裸体视频| 国产欧美日韩视频在线观看| 欧美www视频| 久久人人97超碰人人澡爱香蕉| 免费不卡中文字幕视频| 久久九九有精品国产23| 午夜精品在线视频| 亚洲精品1区2区| 狠狠色伊人亚洲综合网站色| 欧美色精品在线视频| 欧美电影打屁股sp| 亚洲视频图片小说| 欧美一进一出视频| 亚洲激情成人网| 欧美成人免费网| 欧美一区二区三区视频在线 | 久久久999精品| 中国成人亚色综合网站| 亚洲日本欧美在线| 免费一区二区三区| 美女精品自拍一二三四| 欧美一区二区视频观看视频| 欧美伊人影院| 亚洲一区二区三区色| 亚洲欧美日韩国产综合在线 | 久久精品国产精品亚洲综合| 亚洲一区黄色| 欧美亚洲视频在线看网址| 这里只有精品电影| 亚洲午夜成aⅴ人片| 亚洲乱码国产乱码精品精天堂 | 久久蜜桃精品| 可以免费看不卡的av网站| 午夜在线视频观看日韩17c| 亚洲一区久久久| 一区二区黄色| 午夜在线一区| 欧美一区=区| 久久综合五月天婷婷伊人| 久久久久国产精品一区三寸| 模特精品在线|