亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? particle_system.h

?? 030_Particle_system using opengl
?? H
字號:
// Particle_system.h: interface for the Particle_system class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_PARTICLE_SYSTEM_H__B8CA2EC3_7214_11D8_8A6F_AB83B4D90309__INCLUDED_)
#define AFX_PARTICLE_SYSTEM_H__B8CA2EC3_7214_11D8_8A6F_AB83B4D90309__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "init.h"
#include "texture.h"
#include <vector>
using namespace std;

class palette
{
public:
	vector<vec> colors;
	vec get(float t)
	{
		if(colors.size()<2)
		{
			if(colors.size()==1)return colors[0];
			else return vec(1,1,1);
		}
		int index = (int)floor( t*(float)(colors.size()-1) );
		if(index>=colors.size()-1)return colors[colors.size()-1];
		if(index<=0)return colors[0];
		float d = t*(float)(colors.size()-1) - (float)index;
		
		return (1-d)*colors[index] + d*colors[index+1];
	}
	void add(vec color){ colors.push_back(color); }
	int load(char* filename)
	{
		texture a;
		vec col;
		if(!a.imageLoad(filename))return 0;
		a.BGRtoRGB(a.im);
		for(int x=0; x<a.im.sizeX; x++)
		{
			col.x = (float)a.im.data[ (0*a.im.sizeX+x)*a.im.planes + 0]/255.f;
			col.y = (float)a.im.data[ (0*a.im.sizeX+x)*a.im.planes + 1]/255.f;
			col.z = (float)a.im.data[ (0*a.im.sizeX+x)*a.im.planes + 2]/255.f;
			colors.push_back(col);
		}
	}
	void set_fire()
	{
		colors.resize(12,vec(0,0,0));
		for(int i=0; i<4; i++)			// from humus, Particles.h, COLOR_SCHEME_FIRE 
		{
			colors[i    ].set(i / 4.0f, 0, 0);
			colors[i + 4].set(1, i / 4.0f, 0);
			colors[i + 8].set((3 - i) / 3.0f,(3 - i) / 3.0f, 1);
		}
		swap();
	}
	void set_ice()
	{
		colors.resize(12,vec(0,0,0));
		for (int i = 0; i < 6; i++)			// from humus, Particles.h, COLOR_SCHEME_ICE 
		{
			colors[i    ] = vec(0,0,i / 6.0f);
			colors[i + 6] = vec(i / 5.0f,1,1);
		}
		swap();
	}
	void set_smoke()
	{
		colors.resize(12,vec(0,0,0));
		for (int i = 0; i < 12; i++)		// from humus, Particles.h, COLOR_SCHEME_SMOKE 
		{
			float f = i / 44.0f;
			colors[i] = vec(f,f,f);
		}
		swap();
	}
	void set_rainbow()
	{
		colors.resize(12,vec(0,0,0));
		colors[0]  = vec(0,   0,   0);	// from humus, Particles.h, COLOR_SCHEME_RAINBOW 
		colors[1]  = vec(0,   0,   0.25f);
		colors[2]  = vec(0,   0,   0.5f);
		colors[3]  = vec(0,   0,   1);
		colors[4]  = vec(0,   0.5f,1);
		colors[5]  = vec(0,   1,   1);
		colors[6]  = vec(0,   1,   0.5f);
		colors[7]  = vec(0,   1,   0);
		colors[8]  = vec(0.5f,1,   0);
		colors[9]  = vec(1,   1,   0);
		colors[10] = vec(1,   0.5f,0);
		colors[11] = vec(1,   0,   0);
		swap();
	}
	void swap()
	{
		for(int i=0; i<colors.size()/2; i++)
		{
			vec temp = 	colors[i];
			colors[i] = colors[colors.size()-1-i];
			colors[colors.size()-1-i] = temp;
		}
	}
};

class Function
{
public:
	vector<float> values;
	float get(float t)
	{
		if(values.size()<2)
		{
			if(values.size()==1)return values[0];
			else return 1.f;
		}
		int index = (int)floor( t*(float)(values.size()-1) );
		if(index>=values.size()-1)return values[values.size()-1];
		if(index<=0)return values[0];
		float d = t*(float)(values.size()-1) - (float)index;
		
		return (1-d)*values[index] + d*values[index+1];
	}
	void add(float value){ values.push_back(value); }
};

struct z_Particle
{
	vec pos;			// position
	vec vel;			// velocity
	vec grav;			// gravitation
	Function *r;		// radius = half of size

	vec color;
	palette *pal_color;	// if pal_color == NULL, uses variable color
	vec getColor(){ return pal_color->get(t); }
	float get_r(){ return r->get(t); }

	float lifetime; // age of particle in second
	float t;		// [0,1], if > 1 => kill particle
};

#define frand() ((float)rand()/(float)RAND_MAX)				// [ 0, 1]
#define frand2() (2.f*(float)rand()/(float)RAND_MAX-1.f)	// [-1, 1]

class Emiter
{
public:
	virtual int Emit_next_frame(float timeframe) = 0;	// call Emit_test ?
	virtual int Emit_test() = 0;						// emit another particle ?
	virtual z_Particle Emit() = 0;						// generate one particle
};

class Emiter_stream : public Emiter
{
public:
	int max_particles;
	vec pos;				// position
	vec vel;				// velocity
	vec grav;				// gravitation
	Function *r;			// radius = half of size
	float lifetime;			// age of particle in second
	float period_of_effect;
	float time;
	float max_time;			// must by max_time < period_of_effect

	vec color_par;			// particle color
	palette *color_emiter;	// color emiter

	float time_to_add_particle;		// update in each frame

	float angle_of_scatter;			// (sk) uhol rozptylu
	float angle_of_cut_out;			// must by < angle_of_scatter
	float period_of_color_cycle;
	float t_of_color_cycle;
	
	int Emit_next_frame(float timeframe)
	{
		time += timeframe;
		if(time>period_of_effect)time=0;
		if(time>max_time)return 0;
		time_to_add_particle -= timeframe;
		t_of_color_cycle += timeframe/period_of_color_cycle;
		if(t_of_color_cycle>1.f)t_of_color_cycle=0;
		color_par = color_emiter->get(t_of_color_cycle+0.003*frand());
	//	vel.RotZ(180.f*timeframe);
	//	grav = -0.1f*vel;
		return 1;
	}
	int Emit_test()
	{
		if(time_to_add_particle<0)return 1;
		else return 0;
	}
	z_Particle Emit()
	{
		z_Particle a;

	/*	a.pos.set(0,0,frand2());
		a.vel.set(0,0.6f,0);
		static rot=0;
		rot+=31;
		a.vel.RotZ(rot);
		if(rot>360)rot-=360.f;
		a.pos+=0.3f*a.vel;*/
	//	a.grav.set(0.3f,-0.5f,0.f);
	//	a.vel.set(0.2f*frand2(),frand()+0.8f,0.2f*frand2());
	//	a.grav.set(0.6f*frand2(),-1.0f*frand2(),0.6f*frand2());
	//	a.grav.set(0.06f*frand2(),1.0f*frand2(),0.06f*frand2());
		a.pos = pos;
		a.vel = vel;
		vec orthogonal(a.vel);
		orthogonal.RotZ(23.f);
//		orthogonal.RotY(23.f);
		
		orthogonal = CROSS(a.vel,orthogonal);
		float rnd = frand();
	//	rnd *= rnd;

		a.vel.ArbitraryRotate(angle_of_cut_out+(angle_of_scatter-angle_of_cut_out)*rnd,orthogonal);
		a.vel.ArbitraryRotate(360.f*frand(), vel);

		a.grav = grav;
		a.r = r;
		a.pal_color = color_emiter;
	//	a.color = color_par;
		a.lifetime = lifetime-0.2f*lifetime*frand();
		a.t = 0;
		time_to_add_particle += lifetime/(float)max_particles;
		return a;
	}
};

class Emiter_sphere : public Emiter
{
public:
	int max_particles;
	vec pos;				// position
	vec vel;				// velocity
	vec grav;				// gravitation
	Function *r_rocket;		// radius = half of size
	Function *r_sphere;		// radius = half of size
	float lifetime_rocket;	// age of particle in second
	float lifetime_sphere;	// age of particle in second
	float period_of_effect;	// period_of_effect > lifetime_rocket+lifetime_sphere
	vec color_par;			// particle color
//	palette *color_emiter;	// color emiter

	float angle_of_scatter;			// (sk) uhol rozptylu

	float times;
	int gen;
private:
	vec pos_rocket;
	vec vel_rocket;
	float gen_piece_time;			// falling pieces
public:

	int Emit_next_frame(float timeframe)
	{
		times += timeframe;
		if(gen==-1)
		{
			times=0;
			pos_rocket=pos;
			vel_rocket=vel;
			gen_piece_time=0;
			return 1;		// will generate rocket
		}
		else if(times<lifetime_rocket)
							// generate small piece
		{
			vel_rocket += timeframe*grav;
			pos_rocket += timeframe*vel_rocket;
			gen_piece_time -= timeframe;
			if(gen_piece_time<0)
				return 1;
			else
				return 0;
		}
		else if(gen<max_particles)
		{
			return 1;		// will generate sphere
		}
		else if(times>=period_of_effect)
		{
			gen=-1;
			times=0;
			pos_rocket=pos;
			vel_rocket=vel;
			gen_piece_time = 0;
			return 1;
		}
		return 0;
	}
	int Emit_test()
	{
		if(gen==-1)return 1;
		if(times>=lifetime_rocket && gen<max_particles)return 1;
		if(gen_piece_time<0)return 1;
		return 0;
	}
	z_Particle Emit()
	{
		z_Particle a;
		if(gen==-1)
		{
			a.pos = pos;
			a.vel = vel;
			a.grav = grav;
			a.r = r_rocket;
			a.color.set(frand(),frand(),frand());;
			color_par = a.color;
			a.pal_color = NULL;
			a.lifetime = lifetime_rocket;
			a.t = 0;
			gen++;
		}
		else if(gen_piece_time<0)
		{
			a.pos = pos_rocket;
			a.vel = 0.5f*vel_rocket;
			a.grav = grav;
			a.r = r_sphere;
			a.color = color_par;
			a.pal_color = NULL;
			a.lifetime = 0.2f*lifetime_rocket;
			a.t = 0;
			gen_piece_time += 0.01f;
		}
		else
		{
			a.pos = pos_rocket;
			a.vel.set(frand2(),frand2(),frand2());
			a.vel.Normalize();
			a.grav = grav;
			a.r = r_sphere;
			a.color = color_par;
			a.pal_color = NULL;
			a.lifetime = lifetime_sphere*(0.4f+0.6f*frand());
			a.t = 0;
			gen++;
		}
		return a;
	}
};


class Particle_system  
{
public:
	void Emit(float timeframe);
	void Update(float timeframe);
	void Render(vec vr, vec vu);

	palette color[10];
	Function func[5];

	vector<z_Particle> par;
	vector<Emiter*> emiter;
	Particle_system();
	virtual ~Particle_system();

};

#endif // !defined(AFX_PARTICLE_SYSTEM_H__B8CA2EC3_7214_11D8_8A6F_AB83B4D90309__INCLUDED_)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一色屋精品亚洲香蕉网站| 另类调教123区| 美女久久久精品| 91亚洲精华国产精华精华液| 欧美一区二区三区免费大片| 国产精品天干天干在线综合| 另类欧美日韩国产在线| 在线亚洲人成电影网站色www| 国产日产亚洲精品系列| 日韩综合小视频| 欧美制服丝袜第一页| 在线影视一区二区三区| 日韩欧美电影一区| 午夜婷婷国产麻豆精品| 色狠狠一区二区| 国产精品美日韩| 国产精品亚洲成人| 精品国产区一区| 日本亚洲视频在线| 欧美妇女性影城| 亚洲综合偷拍欧美一区色| 91在线视频播放地址| 国产精品情趣视频| 丰满少妇久久久久久久| 久久综合五月天婷婷伊人| 久久爱www久久做| 欧美一级爆毛片| 日本午夜精品视频在线观看| 欧美人与性动xxxx| 日本网站在线观看一区二区三区 | 欧美三级电影在线观看| 亚洲欧美综合网| www.在线欧美| 成人欧美一区二区三区1314| 大尺度一区二区| 国产精品污污网站在线观看 | 欧美激情综合在线| 国产馆精品极品| 国产女人18水真多18精品一级做| 国产精品一级在线| 成人欧美一区二区三区1314| 色综合天天性综合| 亚洲二区视频在线| 日韩欧美国产午夜精品| 热久久免费视频| 欧美成人一区二区三区片免费 | 白白色亚洲国产精品| 国产精品久久久久毛片软件| 91视视频在线观看入口直接观看www | 亚洲啪啪综合av一区二区三区| av成人动漫在线观看| 亚洲蜜桃精久久久久久久| 91精品福利在线| 日韩国产成人精品| 欧美变态凌虐bdsm| 成人激情视频网站| 亚洲国产精品久久人人爱蜜臀| 欧美精品tushy高清| 久久精品99国产精品| 中文字幕欧美日本乱码一线二线| 99久久综合精品| 亚洲午夜激情网页| 久久噜噜亚洲综合| 91官网在线观看| 免费av成人在线| 17c精品麻豆一区二区免费| 欧美日韩国产精选| 高清在线不卡av| 三级欧美在线一区| 欧美国产禁国产网站cc| 欧美三级日本三级少妇99| 久久se精品一区精品二区| 国产精品高潮呻吟| 日韩欧美精品在线| 色综合久久中文综合久久97| 免费观看成人av| 亚洲欧美色图小说| 精品国产一区久久| 欧美优质美女网站| 国精产品一区一区三区mba桃花| 亚洲欧美日韩系列| 国产夜色精品一区二区av| 欧美日韩在线不卡| 91丨国产丨九色丨pron| 国内精品免费**视频| 午夜精品久久久久久久99水蜜桃 | 伊人性伊人情综合网| 欧美精品一区二区三| 在线观看欧美日本| jiyouzz国产精品久久| 久久国产精品99精品国产| 亚洲自拍都市欧美小说| 国产精品污污网站在线观看| 欧美精品一区二区三区很污很色的| 欧美日韩精品一区二区天天拍小说| 成人深夜福利app| 激情文学综合插| 麻豆成人久久精品二区三区小说| 一区二区三区欧美日韩| 成人免费在线视频| 中文字幕av一区二区三区免费看| 欧美大片拔萝卜| 欧美一区二区视频观看视频| 欧美日韩久久久一区| 色综合天天综合在线视频| 成人在线综合网站| 国产精品一区二区在线观看不卡| 久久99精品国产.久久久久| 日韩高清一区二区| 免费成人小视频| 麻豆一区二区在线| 久久爱www久久做| 久久国产乱子精品免费女| 免费日本视频一区| 久久国产精品99久久人人澡| 日韩电影在线观看一区| 天堂资源在线中文精品| 一区二区三区蜜桃网| 亚洲精品乱码久久久久久| 一区二区三区视频在线观看| 一区二区视频免费在线观看| 亚洲黄色录像片| 亚洲va韩国va欧美va| 亚洲国产一区二区三区| 亚洲r级在线视频| 日韩电影一二三区| 蜜桃一区二区三区四区| 毛片av中文字幕一区二区| 国产剧情一区二区| eeuss鲁片一区二区三区在线观看| 成人av资源站| 在线观看av不卡| 69堂成人精品免费视频| 精品国产精品一区二区夜夜嗨| 久久香蕉国产线看观看99| 国产无人区一区二区三区| 国产精品国产三级国产普通话蜜臀| 亚洲欧美在线aaa| 亚洲一区二区欧美激情| 麻豆成人91精品二区三区| 国产成人啪免费观看软件| 色婷婷亚洲一区二区三区| 日韩午夜精品电影| 中文av一区二区| 午夜精品爽啪视频| 久久成人精品无人区| 不卡高清视频专区| 欧美日韩视频在线第一区| 久久蜜桃av一区二区天堂 | 99久久久精品免费观看国产蜜| 欧洲亚洲国产日韩| 精品蜜桃在线看| 亚洲精品你懂的| 捆绑紧缚一区二区三区视频| 北条麻妃国产九九精品视频| 制服丝袜中文字幕一区| 国产精品久久福利| 日韩精品乱码av一区二区| 成人精品视频一区二区三区尤物| 欧美色电影在线| 国产精品欧美精品| 免费在线成人网| 一本久道久久综合中文字幕 | 欧美日韩精品一区二区天天拍小说| 欧美不卡123| 一区二区不卡在线播放 | 国产精品美女久久久久久久久久久 | 国产乱子轮精品视频| 91福利区一区二区三区| 久久午夜羞羞影院免费观看| 亚洲风情在线资源站| 东方欧美亚洲色图在线| 日韩一区二区三区av| 亚洲综合色自拍一区| 成人中文字幕合集| 欧美精品一区二区高清在线观看| 亚洲一区二区三区四区在线免费观看 | 麻豆精品国产传媒mv男同 | 日日夜夜精品免费视频| 91丝袜美腿高跟国产极品老师 | 成人动漫中文字幕| 欧美tk丨vk视频| 日韩成人一级大片| 欧美三级中文字幕| 亚洲综合久久av| av在线播放不卡| 欧美极品少妇xxxxⅹ高跟鞋| 国产在线一区二区综合免费视频| 4hu四虎永久在线影院成人| 亚洲一区免费观看| 欧美系列亚洲系列| 一区二区在线观看视频在线观看| 不卡大黄网站免费看| 国产精品久久久久久久久免费丝袜| 国产在线不卡视频| 欧美大胆人体bbbb| 国产真实精品久久二三区| 精品国产一区二区精华| 精品在线免费观看| 欧美精品一区二区三区蜜桃 |