⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 particlesystem.cpp

📁 粒子系统编辑器 包括了很多特效
💻 CPP
📖 第 1 页 / 共 2 页
字号:
			// Build Quad From A Triangle Strip
			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();
		}
	}

	//Draw the floor if its enabled
	if(	m_bIsColliding)
	{
		glPushAttrib(GL_TEXTURE_BIT);
		
		//disable the texture so a solid color can be drawn
		glDisable(GL_TEXTURE_2D);
		glLineWidth(1.0f);
		glColor4f(0.4f,0.6f,0.6f,0.9f);

		//this is the little stick which shows the particles emitted
		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();

		//now draw the floor
		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();
	}
}


//when the user move a bar on the pad the particle system params
//must be updated. Called from doparametercalcs
CParticleSystem::HotSpotParamsUpdate(int iTheSpot, POINT m_pspt)
{

			//Determined by HS.OnHotSpot, which spot was changed
			//the new mouse position sets how much to change the parameter
			//Max and Mins are set in the header ParticleSystem.h
			if (iTheSpot == HS_BOING)
			{
				if( IsColliding())
				{
					 m_fBoing = ((float)m_pspt.x - 45.0f)/100.0f;
					if( m_fBoing < 0.1f)  m_fBoing = 0.1f;
					if( m_fBoing > 1.0f)  m_fBoing = 1.0f;
				}
			}

			if (iTheSpot == HS_THETA)
			{
				m_fTheta = ((float)m_pspt.x - 45.0f)/100.0f;
				if(m_fTheta < 0.02f) m_fTheta = 0.02f;
				if(m_fTheta > 1.0f) m_fTheta = 1.0f;
			}
			
			//Gravity Start.x
			if (iTheSpot == HS_GRAV_START_X)
			{
				 m_vGravityStart.x = (((float)m_pspt.x - 95.0f)/50.0f)*MAX_GRAVITY;
				if (( m_vGravityStart.x > MAX_GRAVITY)||( m_vGravityStart.x < MIN_GRAVITY))
					 m_vGravityStart.x = 0.0f;
			}

			//Gravity End.x
			if (iTheSpot == HS_GRAV_END_X)
			{
				 m_vGravityEnd.x = (((float)m_pspt.x - 95.0f)/50.0f)*MAX_GRAVITY;
				if (( m_vGravityEnd.x  > MAX_GRAVITY)||( m_vGravityEnd.x  < MIN_GRAVITY))
					 m_vGravityEnd.x  = 0.0f;
			}
			
			//Gravity Start.y
			if (iTheSpot == HS_GRAV_START_Y)
			{
				 m_vGravityStart.y = (((float)m_pspt.x - 95.0f)/50.0f)*MAX_GRAVITY;
				if (( m_vGravityStart.y > MAX_GRAVITY)||( m_vGravityStart.y < MIN_GRAVITY))
					 m_vGravityStart.y = 0.0f;
			}

			//Gravity End.y
			if (iTheSpot == HS_GRAV_END_Y)
			{
				 m_vGravityEnd.y = (((float)m_pspt.x - 95.0f)/50.0f)*MAX_GRAVITY;
				if (( m_vGravityEnd.y  > MAX_GRAVITY)||( m_vGravityEnd.y  < MIN_GRAVITY))
					 m_vGravityEnd.y  = 0.0f;
			}
			
			//Gravity Start.z
			if (iTheSpot == HS_GRAV_START_Z)
			{
				 m_vGravityStart.z = (((float)m_pspt.x - 95.0f)/50.0f)*MAX_GRAVITY;
				if (( m_vGravityStart.z > MAX_GRAVITY)||( m_vGravityStart.z < MIN_GRAVITY))
					 m_vGravityStart.z = 0.0f;
			}

			//Gravity End.z
			if (iTheSpot == HS_GRAV_END_Z)
			{
				 m_vGravityEnd.z = (((float)m_pspt.x - 95.0f)/50.0f)*MAX_GRAVITY;
				if (( m_vGravityEnd.z  > MAX_GRAVITY)||( m_vGravityEnd.z  < MIN_GRAVITY))
					 m_vGravityEnd.z  = 0.0f;
			}
			
			//Alpha Start
			if (iTheSpot == HS_ALPHA_START)
			{
				 m_fAlphaStart = ((float)m_pspt.x - 45.0f)/100.0f;
				if( m_fAlphaStart  > 1.0f)  m_fAlphaStart =1.0f;
				if( m_fAlphaStart  < 0.02f)  m_fAlphaStart = 0.02f;
			}

			//Alpha End
			if (iTheSpot == HS_ALPHA_END)
			{
				 m_fAlphaEnd = ((float)m_pspt.x - 45.0f)/100.0f;
				if( m_fAlphaEnd  > 1.0f)  m_fAlphaEnd =1.0f;
				if( m_fAlphaEnd  < 0.02f)  m_fAlphaEnd = 0.02f;
			}

			//Red Start
			if (iTheSpot == HS_RED_START)
			{
				 m_vColorStart.r = ((float)m_pspt.x - 45.0f)/100.0f;
				if( m_vColorStart.r > 0.96f)  m_vColorStart.r = 0.96f;
				if( m_vColorStart.r < 0.04f)  m_vColorStart.r = 0.04f;
			}

			//Red End
			if (iTheSpot == HS_RED_END)
			{
				 m_vColorEnd.r = ((float)m_pspt.x - 45.0f)/100.0f;
				if( m_vColorEnd.r > 0.96f)  m_vColorEnd.r = 0.96f;
				if( m_vColorEnd.r < 0.04f)  m_vColorEnd.r = 0.04f;
			}

			//Grn Start
			if (iTheSpot == HS_GREEN_START)
			{
				 m_vColorStart.g = ((float)m_pspt.x - 45.0f)/100.0f;
				if( m_vColorStart.g > 0.96f)  m_vColorStart.g = 0.96f;
				if( m_vColorStart.g < 0.04f)  m_vColorStart.g = 0.04f;
			}

			//Grn End
			if (iTheSpot == HS_GREEN_END)
			{
				 m_vColorEnd.g = ((float)m_pspt.x - 45.0f)/100.0f;
				if( m_vColorEnd.g > 0.96f)  m_vColorEnd.g = 0.96f;
				if( m_vColorEnd.g < 0.04f)  m_vColorEnd.g = 0.04f;
			}

			//Blu Start
			if (iTheSpot == HS_BLUE_START)
			{
				 m_vColorStart.b = ((float)m_pspt.x - 45.0f)/100.0f;
				if( m_vColorStart.b > 0.96f)  m_vColorStart.b = 0.96f;
				if( m_vColorStart.b < 0.04f)  m_vColorStart.b = 0.04f;
			}

			//Blu End
			if (iTheSpot == HS_BLUE_END)
			{
				 m_vColorEnd.b = ((float)m_pspt.x - 45.0f)/100.0f;
				if( m_vColorEnd.b > 0.96f)  m_vColorEnd.b = 0.96f;
				if( m_vColorEnd.b < 0.04f)  m_vColorEnd.b = 0.04f;
			}
			
			//Size Start
			if (iTheSpot == HS_SIZE_START)
			{
				 m_fSizeStart = (((float)m_pspt.x - 45.0f)/100.0f)*MAX_SIZE;
				if( m_fSizeStart > MAX_SIZE)  m_fSizeStart = MAX_SIZE;
				if( m_fSizeStart < MIN_SIZE)  m_fSizeStart = MIN_SIZE;
			}

			//Size End
			if (iTheSpot == HS_SIZE_END)
			{
				 m_fSizeEnd = (((float)m_pspt.x - 45.0f)/100.0f)*MAX_SIZE;
				if( m_fSizeEnd > MAX_SIZE)  m_fSizeEnd = MAX_SIZE;
				if( m_fSizeEnd < MIN_SIZE)  m_fSizeEnd = MIN_SIZE;
			}

			//Particles Per Second
				//EMISSION
			if (iTheSpot == HS_EMMISION)
			{
				if ((float)m_pspt.x < 45.0f) m_pspt.x = 45L;
				 m_uParticlesPerSec = (unsigned int)((((float)m_pspt.x - 45.0f)/100.0f)*MAX_EMISSION);
				if( m_uParticlesPerSec  >= (unsigned int)MAX_EMISSION)  m_uParticlesPerSec = (unsigned int)MAX_EMISSION;
				if( m_uParticlesPerSec <= (unsigned int)MIN_EMISSION)  m_uParticlesPerSec = (unsigned int)MIN_EMISSION;
			}

			//Speed
			if (iTheSpot == HS_SPEED)
			{
				 m_fSpeed = (((float)m_pspt.x - 45.0f)/100.0f)*MAX_SPEED;
				if( m_fSpeed > MAX_SPEED)  m_fSpeed = MAX_SPEED;
				if( m_fSpeed < MIN_SPEED)  m_fSpeed = MIN_SPEED;
			}
			
			//LifeTime
			if (iTheSpot == HS_LIFE)
			{
				 m_fLifeTime = (((float)m_pspt.x - 45.0f)/100.0f)*MAX_LIFETIME;
				if( m_fLifeTime > MAX_LIFETIME)  m_fLifeTime = MAX_LIFETIME;
				if( m_fLifeTime < MIN_LIFETIME)  m_fLifeTime = MIN_LIFETIME;
			}

			//VAR Alpha
			if (iTheSpot == HS_VAR_ALPHA)
			{
				 m_fAlphaVar = ((float)m_pspt.x - 45.0f)/100.0f;
				if( m_fAlphaVar > 0.96f)  m_fAlphaVar = 0.96f;
				if( m_fAlphaVar < 0.01f)  m_fAlphaVar = 0.01f;
			}
			
			//VAR color
			if (iTheSpot == HS_VAR_COLOR)
			{
				 m_vColorVar.r = ((float)m_pspt.x - 45.0f)/100.0f;
				if( m_vColorVar.r > 0.96f)  m_vColorVar.r = 0.96f;
				if( m_vColorVar.r < 0.01f)  m_vColorVar.r = 0.01f;
				 m_vColorVar.g =  m_vColorVar.r;
				 m_vColorVar.b =  m_vColorVar.r;
			}

			//VAR Size
			if (iTheSpot == HS_VAR_SIZE)
			{
				 m_fSizeVar = ((float)m_pspt.x - 45.0f)/100.0f*MAX_SIZE;
				if( m_fSizeVar > MAX_SIZE)  m_fSizeVar = MAX_SIZE;
				if( m_fSizeVar < MIN_SIZE)  m_fSizeVar = MIN_SIZE;
			}
			
			//VAR Life
			if (iTheSpot == HS_VAR_LIFE)
			{
				 m_fLifeVar = ((float)m_pspt.x - 45.0f)/100.0f*MAX_LIFETIME;
				if( m_fLifeVar > MAX_LIFETIME)  m_fLifeVar = MAX_LIFETIME;
				if( m_fLifeVar < MIN_LIFETIME)  m_fLifeVar = MIN_LIFETIME;
			}
			
			//VAR Speed
			if (iTheSpot == HS_VAR_SPEED)
			{
				 m_fSpeedVar = ((float)m_pspt.x - 45.0f)/100.0f*MAX_SPEED;
				if( m_fSpeedVar > MAX_SPEED)  m_fSpeedVar = MAX_SPEED;
				if( m_fSpeedVar < MIN_SPEED)  m_fSpeedVar = MIN_SPEED;
			}			

				//If Floor is selected for toggle for collision on off
			if (iTheSpot == HS_FLOOR)
					if (IsColliding()) m_bIsColliding = FALSE;
						else m_bIsColliding = TRUE;
				
				
				//If Moving is selected for toggle on off
			if (iTheSpot == HS_MOVING)
					if (m_bIsMoving) m_bIsMoving = FALSE;
						else m_bIsMoving = TRUE;

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -