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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? particlesystem.cpp

?? 用VC++與OPENGL研發(fā)的粒子系統(tǒng)的模擬程序
?? CPP
字號(hào):
// ParticleSystem.cpp: implementation of the CParticleSystem class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "MyFire2.h"
#include "ParticleSystem.h"
#include <math.h>

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CParticleSystem::CParticleSystem()
{
	m_fEmissionResidue = 0.0f;
	m_bIsSuppressed = FALSE;
	fVarx = 0.8f;
}

CParticleSystem::~CParticleSystem()
{

}

bool CParticleSystem::IsColliding()
{
	return m_bIsColliding;
}

//////////////////////////////////////////////////
//粒子系統(tǒng)更新函數(shù)
CParticleSystem::Update(float fTime)
{
	// fTime是絕對(duì)時(shí)間,必須計(jì)算相對(duì)時(shí)間間隔
	float fTimeDelta = fTime - m_fTimeLastUpdate;
	m_fTimeLastUpdate = fTime;
	if (m_bIsMoving)
	{
		static float fThetaHoriz = 0.0f;
		static float fThetaVert = 180.0f;
		fThetaHoriz += 25.0f * fTimeDelta;
		fThetaVert += 35.0f * fTimeDelta*fVarx;
		if ( fThetaHoriz > 359.0f ) 
		{
			fThetaHoriz = 0.0f;
		}
		if ( fThetaVert > 359.0f ) 
		{
			fVarx = RANDOM_NUM*1.0f+1.0f;
			fThetaVert = 0.0f;
		}
		m_vLocation.x = 20.0f * (float)cos( fThetaHoriz * 0.01745f );//*0.75f;
		m_vLocation.y =  7.0f * (float)sin( fThetaVert * 0.01745f );//*0.75f;
		m_vLocation.z = 20.0f * (float)sin( fThetaHoriz * 0.01745f )*(float)sin( fThetaVert * 0.01745f );//*0.75f;
	}
	else
	{
		m_vLocation.x = 0.0f;
		m_vLocation.y = 0.0f;
		m_vLocation.z = 0.0f;
	}
	m_uParticlesAlive = 0;
	// 更新所有的粒子
	for ( int i=0; i<MAX_PARTICLES; i++)
	{
		if (m_rParticles[i].m_fAge >= 0.0f )
			if ( m_rParticles[i].Update( fTimeDelta )) 
				m_uParticlesAlive++;
	}
	float fParticlesNeeded = m_uParticlesPerSec * fTimeDelta + m_fEmissionResidue;
	unsigned int uParticlesCreated = (unsigned int)fParticlesNeeded;
	if ( !m_bIsSuppressed )	
	{
		m_fEmissionResidue = fParticlesNeeded - uParticlesCreated;
	}	
	else	
	{		
		m_fEmissionResidue = 0.0f;		
		uParticlesCreated = 0;	
	}
	if ( uParticlesCreated > 0 )
	{
		// 循環(huán)所有粒子
		for ( i=0; i<MAX_PARTICLES; i++ )
		{
			if ( !uParticlesCreated )
				break;
			// 判斷粒子生命
			if ( m_rParticles[i].m_fAge < 0.0f ) 
			{
				// 定義新粒子的生命
				m_rParticles[i].m_fAge = 0.0f;
				m_rParticles[i].m_fLifetime = m_fLifeTime+RANDOM_NUM * m_fLifeVar;
				Clamp( m_rParticles[i].m_fLifetime, MIN_LIFETIME, MAX_LIFETIME ); 

				m_rParticles[i].m_fAlpha = m_fAlphaStart + RANDOM_NUM * m_fAlphaVar;
				Clamp( m_rParticles[i].m_fAlpha, MIN_ALPHA, MAX_ALPHA );
				m_rParticles[i].m_fAlphaDelta = (m_fAlphaEnd - m_rParticles[i].m_fAlpha) / m_rParticles[i].m_fLifetime;
				// 粒子的顏色
				m_rParticles[i].m_vColor.r = m_vColorStart.r+ RANDOM_NUM * m_vColorVar.r;
				m_rParticles[i].m_vColor.g = m_vColorStart.g + RANDOM_NUM * m_vColorVar.g;
				m_rParticles[i].m_vColor.b = m_vColorStart.b + RANDOM_NUM * m_vColorVar.b;

				Clamp( m_rParticles[i].m_vColor.r, 0.0f, 1.0f );
				Clamp( m_rParticles[i].m_vColor.g, 0.0f, 1.0f );
				Clamp( m_rParticles[i].m_vColor.b, 0.0f, 1.0f );

				m_rParticles[i].m_vColorDelta.r = ((m_vColorEnd.r+ RANDOM_NUM * m_vColorVar.r) - m_rParticles[i].m_vColor.r) / m_rParticles[i].m_fLifetime;
				m_rParticles[i].m_vColorDelta.g = ((m_vColorEnd.g+ RANDOM_NUM * m_vColorVar.g) - m_rParticles[i].m_vColor.g) / m_rParticles[i].m_fLifetime;
				m_rParticles[i].m_vColorDelta.b = ((m_vColorEnd.b+ RANDOM_NUM * m_vColorVar.b) - m_rParticles[i].m_vColor.b) / m_rParticles[i].m_fLifetime;
				
				m_rParticles[i].m_fSize = m_fSizeStart + RANDOM_NUM * m_fSizeVar;
				Clamp( m_rParticles[i].m_fSize, MIN_SIZE, MAX_SIZE );
				m_rParticles[i].m_fSizeDelta = (m_fSizeEnd - m_rParticles[i].m_fSize) / m_rParticles[i].m_fLifetime;
				
				// 定義重力
					m_rParticles[i].m_vParticleGravity.x = 	m_vGravityStart.x * GRAVITY + RANDOM_NUM * m_fGravityVar*GRAVITY;
					Clamp( m_rParticles[i].m_vParticleGravity.x, MIN_GRAVITY*GRAVITY, MAX_GRAVITY*GRAVITY );

					m_rParticles[i].m_vGravityDelta.x = 
									( m_vGravityEnd.x*GRAVITY - m_rParticles[i].m_vParticleGravity.x ) / m_rParticles[i].m_fLifetime;

					m_rParticles[i].m_vParticleGravity.y = 	m_vGravityStart.y * GRAVITY + RANDOM_NUM * m_fGravityVar*GRAVITY;
					Clamp( m_rParticles[i].m_vParticleGravity.y, MIN_GRAVITY*GRAVITY, MAX_GRAVITY*GRAVITY );

					m_rParticles[i].m_vGravityDelta.y = 
									( m_vGravityEnd.y*GRAVITY - m_rParticles[i].m_vParticleGravity.y ) / m_rParticles[i].m_fLifetime;

					m_rParticles[i].m_vParticleGravity.z = 	m_vGravityStart.z * GRAVITY + RANDOM_NUM * m_fGravityVar*GRAVITY;
					Clamp( m_rParticles[i].m_vParticleGravity.z, MIN_GRAVITY*GRAVITY, MAX_GRAVITY*GRAVITY );

					m_rParticles[i].m_vGravityDelta.z = 
									( m_vGravityEnd.z*GRAVITY - m_rParticles[i].m_vParticleGravity.z ) / m_rParticles[i].m_fLifetime;

				// 計(jì)算粒子的速度 
				m_vTempVelocity.x = (m_vLocation.x - m_vPrevLocation.x)/fTimeDelta;
				m_vTempVelocity.y = (m_vLocation.y - m_vPrevLocation.y)/fTimeDelta;
				m_vTempVelocity.z = (m_vLocation.z - m_vPrevLocation.z)/fTimeDelta;
				// 從當(dāng)前位置和前一個(gè)位置發(fā)射粒子
				m_rParticles[i].m_vLocation.x = m_vPrevLocation.x;
				m_rParticles[i].m_vLocation.y = m_vPrevLocation.y;
				m_rParticles[i].m_vLocation.z = m_vPrevLocation.z;
				// 更新前一位置
				m_rParticles[i].m_vPrevLocation.x = m_rParticles[i].m_vLocation.x;
				m_rParticles[i].m_vPrevLocation.y = m_rParticles[i].m_vLocation.y;
				m_rParticles[i].m_vPrevLocation.z = m_rParticles[i].m_vLocation.z;
				// 定義發(fā)射器的方向
				float RandomYaw = RANDOM_NUM * 3.14159f * 2.0f;
				float RandomPitch = RANDOM_NUM * m_fTheta * 3.14159f ;/// 180.0f ;
				// 利用球面坐標(biāo)定義速度矢量
				m_rParticles[i].m_vVelocity.y = static_cast<float>(cos( RandomPitch ));
				m_rParticles[i].m_vVelocity.x = static_cast<float>(sin(RandomPitch) * cos(RandomYaw));
				m_rParticles[i].m_vVelocity.z = static_cast<float>(sin(RandomPitch) * sin(RandomYaw));
				m_rParticles[i].m_vVelocity.x *= m_fSpeed ;
				m_rParticles[i].m_vVelocity.y *= m_fSpeed ;
				m_rParticles[i].m_vVelocity.z *= m_fSpeed ;
			    // 設(shè)置粒子的雙親
				m_rParticles[i].SetParent(this);
				// 減少所需粒子數(shù)
				uParticlesCreated--;
			}
		}
	}
	// 將當(dāng)前位置設(shè)置為前一位置
	m_vPrevLocation = m_vLocation;	

}

// 繪制粒子系統(tǒng)
CParticleSystem::Draw(float x_Rot,float y_Rot)
{
int loop;

	for (loop = 0; loop < MAX_PARTICLES; loop++)
	{
		// 如果粒子處于生命期,則繪制
		if (m_rParticles[loop].m_fAge >= 0.0f)
		{
			glColor4f(m_rParticles[loop].m_vColor.r,m_rParticles[loop].m_vColor.g,
								m_rParticles[loop].m_vColor.b,m_rParticles[loop].m_fAlpha);

			glPushMatrix();
			glTranslatef(m_rParticles[loop].m_vLocation.x,
										m_rParticles[loop].m_vLocation.y,
											m_rParticles[loop].m_vLocation.z);
			
			glRotatef(y_Rot,0.0f,1.0f,0.0f);
			glRotatef(x_Rot,1.0f,0.0f,0.0f);

			glBegin(GL_TRIANGLE_STRIP);						
			  glTexCoord2f(1.0f, 1.0f); glVertex3f( m_rParticles[loop].m_fSize, m_rParticles[loop].m_fSize, 0.0f); // Top Right
				glTexCoord2f(0.0f, 1.0f); glVertex3f(-m_rParticles[loop].m_fSize, m_rParticles[loop].m_fSize, 0.0f); // Top Left
				glTexCoord2f(1.0f, 0.0f); glVertex3f( m_rParticles[loop].m_fSize,-m_rParticles[loop].m_fSize, 0.0f); // Bottom Right
				glTexCoord2f(0.0f, 0.0f); glVertex3f(-m_rParticles[loop].m_fSize,-m_rParticles[loop].m_fSize, 0.0f);// Bottom Left
			glEnd();									
			glPopMatrix();
		}
	}
	// 繪制地面
	if(	m_bIsColliding)
	{
		glPushAttrib(GL_TEXTURE_BIT);
		// 關(guān)閉紋理
		glDisable(GL_TEXTURE_2D);
		glLineWidth(1.0f);
		glColor4f(0.4f,0.6f,0.6f,0.9f);
		// 繪制一個(gè)小燭臺(tái)
		glBegin(GL_LINES);
				glVertex3f( m_vLocation.x,m_vLocation.y-m_fSizeStart*0.5f,m_vLocation.z);
				glVertex3f( m_vLocation.x,m_vLocation.y-m_fSizeStart*3.0f,m_vLocation.z);
		glEnd();
		// 繪制地面
		glTranslatef(0.0f,FLOOR,0.0f);
		glColor4f(0.0f,0.3f,0.3f,0.7f);
		glBegin(GL_LINE_STRIP);
				glVertex3f(-20.0f,-0.0f,-20.0f);
				glVertex3f(-20.0f,-0.0f, 20.0f);
				glVertex3f( 20.0f,-0.0f, 20.0f);
				glVertex3f( 20.0f,-0.0f,-20.0f);
				glVertex3f(-20.0f,-0.0f,-20.0f);
		glEnd();
		glBegin(GL_LINE_STRIP);
				glVertex3f(-10.0f,-0.0f,-10.0f);
				glVertex3f(-10.0f,-0.0f, 10.0f);
				glVertex3f( 10.0f,-0.0f, 10.0f);
				glVertex3f( 10.0f,-0.0f,-10.0f);
				glVertex3f(-10.0f,-0.0f,-10.0f);
		glEnd();
		glPopAttrib();
	}
}



?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲图片自拍偷拍| 亚洲欧洲精品一区二区三区| 成人黄色av电影| 偷拍与自拍一区| 中文字幕不卡在线观看| 欧美精品 国产精品| 成人手机在线视频| 日韩av在线播放中文字幕| 日韩理论在线观看| 国产亚洲欧美日韩日本| 欧美一区日本一区韩国一区| 色伊人久久综合中文字幕| 国产成人免费高清| 日韩国产精品久久久| 亚洲另类一区二区| 国产精品网站一区| 欧美不卡一区二区三区四区| 精品视频免费在线| 一本久久a久久精品亚洲| 国产99精品视频| 久久99精品久久只有精品| 午夜私人影院久久久久| 亚洲精品中文在线影院| 欧美在线观看你懂的| 一区二区三区成人| 欧美不卡激情三级在线观看| 色综合久久99| 麻豆精品视频在线| 专区另类欧美日韩| 97超碰欧美中文字幕| 天天影视涩香欲综合网| 亚洲成人免费电影| 亚洲香肠在线观看| 亚洲大片一区二区三区| 亚洲国产精品一区二区www在线| 亚洲精品国产精华液| 最新国产精品久久精品| 最新国产精品久久精品| 亚洲人成精品久久久久久| 91精品国产综合久久精品图片| 天天综合色天天| 亚洲欧洲成人精品av97| 久久色在线视频| 欧美色窝79yyyycom| 波多野结衣亚洲| 蜜臀a∨国产成人精品| 一区二区三区产品免费精品久久75 | 欧美精品18+| 99国产精品99久久久久久| 国内外成人在线| 亚洲成人一区在线| 亚洲女爱视频在线| 国产精品麻豆一区二区| 2024国产精品| 91精品国产91久久久久久一区二区 | 91免费看视频| 1区2区3区国产精品| 国产精品入口麻豆原神| 亚洲特级片在线| 亚洲国产综合91精品麻豆| 日韩国产一区二| 国产一区二区免费看| 成人美女在线视频| 在线观看视频一区二区欧美日韩| 欧美三级中文字| 精品蜜桃在线看| 国产精品免费久久久久| 亚洲午夜精品一区二区三区他趣| 日韩精品一二三四| 国产成人午夜视频| 色婷婷av久久久久久久| 日韩精品一区二区三区四区| 国产精品女主播在线观看| 亚洲国产裸拍裸体视频在线观看乱了| 日韩成人一级大片| 粉嫩av一区二区三区粉嫩| 在线视频一区二区三| 日韩写真欧美这视频| 国产精品成人一区二区三区夜夜夜 | 精品粉嫩aⅴ一区二区三区四区| 国产精品无圣光一区二区| 亚洲综合999| 国产一区欧美一区| 欧美日韩综合色| 国产欧美日产一区| 图片区小说区国产精品视频| 成人自拍视频在线| 欧美一区二区三区视频在线| 中文字幕一区二区不卡| 免费日本视频一区| 色婷婷久久99综合精品jk白丝| 欧美tickling挠脚心丨vk| 亚洲欧美日韩电影| 国产一区福利在线| 欧美高清视频www夜色资源网| 中文字幕免费不卡| 日韩高清一区在线| 一本到不卡精品视频在线观看| 久久综合色婷婷| 天天影视色香欲综合网老头| 91蜜桃免费观看视频| 久久美女高清视频| 蜜桃av一区二区| 欧美高清hd18日本| 国产精品进线69影院| 久久se精品一区精品二区| 在线亚洲精品福利网址导航| 欧美激情一二三区| 久久精品99国产精品日本| 亚洲精品乱码久久久久久久久| 国产91在线观看| 午夜激情一区二区三区| 99久久精品国产毛片| 久久久一区二区| 久久精品久久久精品美女| 欧美丝袜丝nylons| 国产精品不卡在线| 国产成人精品影视| 337p日本欧洲亚洲大胆精品 | 日本大胆欧美人术艺术动态| 色88888久久久久久影院按摩| 国产精品三级av| 韩国三级电影一区二区| 亚洲国产美国国产综合一区二区| 激情综合一区二区三区| 91国偷自产一区二区三区观看| 日韩精品一区在线观看| 亚洲欧美另类小说| 国产一区二区三区黄视频| 色一情一乱一乱一91av| 久久青草国产手机看片福利盒子| 亚洲一区在线看| 不卡一区中文字幕| 日韩欧美的一区二区| 夜夜嗨av一区二区三区| 丰满岳乱妇一区二区三区| 日韩一区二区三区视频| 夜夜揉揉日日人人青青一国产精品| 一区二区三区欧美日韩| 欧美伊人久久久久久午夜久久久久| 亚洲精品欧美二区三区中文字幕| 日本久久一区二区三区| 亚洲高清中文字幕| 欧美精品一二三| 玖玖九九国产精品| 久久九九全国免费| av在线播放一区二区三区| 专区另类欧美日韩| 欧美日韩在线播放一区| 日韩成人伦理电影在线观看| 精品精品国产高清a毛片牛牛 | 欧美日韩国产一区| 日本在线观看不卡视频| 精品国产区一区| 日本一区二区三区电影| 蜜臀久久99精品久久久久宅男| 欧美日韩一区高清| 亚洲图片欧美一区| 欧美日韩一区久久| 亚洲第一成人在线| 欧美精品一卡二卡| 婷婷六月综合网| 宅男噜噜噜66一区二区66| 天天av天天翘天天综合网色鬼国产| 欧美影视一区二区三区| 亚洲高清视频在线| 欧美日韩极品在线观看一区| 久久免费国产精品| 国产乱人伦偷精品视频免下载| 自拍av一区二区三区| 538在线一区二区精品国产| 国产综合色视频| 国产精品伦一区| 制服丝袜激情欧洲亚洲| 国产一区二区伦理| 一区二区不卡在线视频 午夜欧美不卡在 | 欧美电视剧免费全集观看| 国产sm精品调教视频网站| 亚洲综合免费观看高清完整版在线| 日韩欧美亚洲国产另类| 99视频一区二区| 日本午夜精品一区二区三区电影| 国产精品免费视频网站| 91麻豆精品国产91久久久资源速度| 国产福利一区在线| 亚洲风情在线资源站| 久久久久综合网| 欧美日韩美女一区二区| 国产激情偷乱视频一区二区三区| 亚洲第一搞黄网站| 亚洲欧洲精品一区二区精品久久久| 日韩午夜在线播放| 色综合久久99| 国产在线精品视频| 视频一区在线播放| 亚洲欧美中日韩| 久久精品网站免费观看| 日韩一二三区视频| 91福利小视频| 99re成人精品视频|