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

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

?? cfireroutine.cpp

?? 用vc編寫(xiě)出類(lèi)似于JAVA應(yīng)用中的水紋、火焰以及熔漿效果
?? CPP
字號(hào):
// CFireRoutine.cpp: implementation of the CFireRoutine class.
//
//////////////////////////////////////////////////////////////////////

#include "CFireRoutine.h"

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

CFireRoutine::CFireRoutine()
{
	m_iWidth = 0;
	m_iHeight = 0;
	m_pFireBits = NULL;
	m_pYIndexes = NULL;
	m_iFireSource = 2;
	m_iFireChance = 10;
	m_iFlameHeight = 50;
	m_iAlpha = 255;

	m_FireColors[0]  = RGB(0,0,0);// Black
	m_FireColors[1]  = RGB(255,0,0);// Red
	m_FireColors[2]  = RGB(255,255,0);// Yellow
	m_FireColors[3]  = RGB(255,255,255);// White
	m_iAvgFlameWidth = 35;
}

CFireRoutine::~CFireRoutine()
{
	if(m_pFireBits != NULL)
		delete [] m_pFireBits;

	if(m_pYIndexes != NULL)
		delete [] m_pYIndexes;

	m_pFireBits = NULL;
	m_pYIndexes = NULL;
}
void CFireRoutine::InitFire()
{
	// Get Rid of anything already there
	if(m_pFireBits != NULL)
		delete [] m_pFireBits;

	if(m_pYIndexes != NULL)
		delete [] m_pYIndexes;

	// Add three to the height
	m_iHeight+=3;

	m_pYIndexes = new long[m_iHeight];

	m_pFireBits = new BYTE[m_iWidth*m_iHeight];

	// Clear the Fire bits
	memset(m_pFireBits,0,(m_iWidth*m_iHeight));
	// do all the y index pre-calc..
	for (int y = m_iHeight; y >0; y--)  
		m_pYIndexes[y] = y * m_iWidth;  

	// Create our pallete

	InitPallette();
	ClrHotSpots();

}
void CFireRoutine::ClrHotSpots()
{
	// clear the fire line
	memset(&m_pFireBits[m_pYIndexes[m_iFireSource]],0,m_iWidth);
}
void CFireRoutine::InitPallette()
{
	// Create a gradient between all the colors we have for our fire...

	long iCount = 0;
	COLORREF clrStart;
	COLORREF clrEnd;

	for(int iColor = 1;iColor<4;iColor++)
	{

		
		clrStart = m_FireColors[iColor-1];
		clrEnd = m_FireColors[iColor];

			
		int r, g, b;							// First distance, then starting value
		float rStep, gStep, bStep;		// Step size for each color

		// Get the color differences
		r = (GetRValue(clrEnd) - GetRValue(clrStart));
		g = (GetGValue(clrEnd) - GetGValue(clrStart));
		b =  (GetBValue(clrEnd) - GetBValue(clrStart));

		int nSteps = max(abs(r), max(abs(g), abs(b)));
		float fStep = (float)(255/3)/ (float)nSteps;
		// Calculate the step size for each color
		rStep = r/(float)nSteps;
		gStep = g/(float)nSteps;
		bStep = b/(float)nSteps;

		// Reset the colors to the starting position
		r = GetRValue(clrStart);
		g = GetGValue(clrStart);
		b = GetBValue(clrStart);

		for (int iOnBand = 0; iOnBand < nSteps; iOnBand++) 
		{
			//COLORREF color = RGB(r+rStep*iOnBand, g + gStep*iOnBand, b + bStep *iOnBand);
			COLORREF color = RGB(b + bStep *iOnBand, g + gStep*iOnBand,r+rStep*iOnBand);

			long lIndex = (int)(iOnBand * fStep);

			if(lIndex+((iColor-1)*85) < 255)
				m_pPalletteBuffer[lIndex+((iColor-1)*85)] = color;				
		}
	}
	// Step on the second color a little bit...
	clrStart = m_FireColors[0];
	clrEnd = m_FireColors[1];

	for(int kj=0;kj<m_iFlameHeight;kj++)
		m_pPalletteBuffer[kj] = 0;

	int r, g, b;							// First distance, then starting value
	float rStep, gStep, bStep;		// Step size for each color

	// Get the color differences
	r = (GetRValue(clrEnd) - GetRValue(clrStart));
	g = (GetGValue(clrEnd) - GetGValue(clrStart));
	b =  (GetBValue(clrEnd) - GetBValue(clrStart));

	int nSteps = max(abs(r), max(abs(g), abs(b)));
	float fStep = (float)(85-m_iFlameHeight)/ (float)nSteps;
	// Calculate the step size for each color
	rStep = r/(float)nSteps;
	gStep = g/(float)nSteps;
	bStep = b/(float)nSteps;

	// Reset the colors to the starting position
	r = GetRValue(clrStart);
	g = GetGValue(clrStart);
	b = GetBValue(clrStart);

	for (int iOnBand = 0; iOnBand < nSteps; iOnBand++) 
	{
		//COLORREF color = RGB(r+rStep*iOnBand, g + gStep*iOnBand, b + bStep *iOnBand);
		COLORREF color = RGB(b + bStep *iOnBand, g + gStep*iOnBand,r+rStep*iOnBand);

		long lIndex = (int)(iOnBand * fStep);

		m_pPalletteBuffer[lIndex+(85-m_iFlameHeight)] = color;				
	}

}
// Macro to get a random integer within a specified range */
#define getrandom( min, max ) (( rand() % (int)((( max ) + 1 ) - ( min ))) + ( min ))
#include <time.h>

void CFireRoutine::SetHotSpots()
{  
	ClrHotSpots();
	//m_iAvgFlameWidth

	long lPosition = 0;
	while(lPosition < m_iWidth)
	{
		// see if we should do a flame
		if (getrandom(0,100) < m_iFireChance)
		{
			// get a flame width
			long lFlameWidth = getrandom(1,m_iAvgFlameWidth);
			for(int i=0;i<lFlameWidth;i++)
			{
				if(lPosition < m_iWidth)
				{
					m_pFireBits[m_pYIndexes[m_iFireSource]+lPosition] =254;// set a hot spot! 
					lPosition++;
				}
			}
		}
		lPosition++;
	}
//	for (x = 0; x < m_iWidth; x++)  
//	{  
//		if (getrandom(0,100) < m_iFireChance)
//		{
			
//		}
//	}  
} 

void CFireRoutine::MakeLines()  
{  
	int x, y;  

	for (x = 0; x < m_iWidth; x++)  
	{
		 for (y = m_iFireSource; y<m_iHeight-1;y++) 
 //       for (y = m_iHeight; y > m_iFireSource; y--)  
		{
			//m_pFireBits[m_pYIndexes[y-1]+x] =Average(x,y);
			 m_pFireBits[m_pYIndexes[y+1]+x] =Average(x,y);
		}
	}
} 
unsigned char CFireRoutine::Average(int x, int y)  
{  

	unsigned char ave_color;  
	unsigned char ave1, ave2, ave3, ave4, ave5, ave6, ave7;  

	// Make sure we are not at the last line...
	if(y == m_iHeight)
		ave1 = m_pFireBits[m_pYIndexes[y-1] + x];  
	else
		ave1 = m_pFireBits[m_pYIndexes[y + 1] + x];  

	ave2 = m_pFireBits[m_pYIndexes[y - 1] + x];  
	ave3 = m_pFireBits[m_pYIndexes[y] + x + 1];  
	ave4 = m_pFireBits[m_pYIndexes[y] + x - 1];  
	ave5 = m_pFireBits[m_pYIndexes[y] + x + 2];  
	ave6 = m_pFireBits[m_pYIndexes[y] + x - 2];  
	ave7 = m_pFireBits[m_pYIndexes[y] + x];

	ave_color = (ave1 + ave2 + ave3 + ave4 + ave5 + ave6 + ave7) / 7;  

	return(ave_color);  
} 
void CFireRoutine::Render(DWORD* pVideoMemory,
		                 int iwidth, 
						 int iheight 						 
						 )
{
	SetHotSpots();   // generate random hotspots  
	MakeLines();  // do all the math and screen updating  

	// Right now Im just going to blit it right onto the video memory
	unsigned char* pSrcBitlin;// = m_pFireBits+(m_iWidth*3);// get rid of our fire source
	BYTE *dst;//=(BYTE*)Dib->pVideoMemory;

	BYTE r;
	BYTE g;
	BYTE b;

	for(int i=0;i<m_iHeight-3;i++)
	{
		dst = (BYTE*)&pVideoMemory[(iwidth*i)];
		pSrcBitlin =&m_pFireBits[m_pYIndexes[i+3]];

		for(int x=0;x<m_iWidth;x++)
		{
			r = GetRValue(m_pPalletteBuffer[pSrcBitlin[x]]);
			g = GetGValue(m_pPalletteBuffer[pSrcBitlin[x]]);
			b = GetBValue(m_pPalletteBuffer[pSrcBitlin[x]]);

			dst[0]=(BYTE)(((r-dst[0])*m_iAlpha+(dst[0]<<8))>>8);
			dst[1]=(BYTE)(((g-dst[1])*m_iAlpha+(dst[1]<<8))>>8);
			dst[2]=(BYTE)(((b-dst[2])*m_iAlpha+(dst[2]<<8))>>8);	
			dst+=4;
		}
	}

}


?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜精品aaa| 久久精品一区二区三区不卡牛牛| 一区二区三区中文在线| 91免费视频网| 亚洲影院理伦片| 欧美精品日日鲁夜夜添| 青青草成人在线观看| 精品欧美一区二区在线观看 | 最新不卡av在线| 色婷婷综合在线| 视频一区二区国产| 2024国产精品| 99re这里只有精品视频首页| 亚洲午夜激情网站| 久久婷婷久久一区二区三区| 成人av免费在线观看| 亚洲一区二区视频在线| 日韩欧美一二三区| 成人手机电影网| 亚洲成人免费电影| 久久这里只有精品6| 色综合天天综合给合国产| 亚洲成人av一区二区三区| 欧美精品一区二| 色就色 综合激情| 久久97超碰国产精品超碰| 亚洲人精品午夜| 日韩精品一区二区三区视频| 9i看片成人免费高清| 日韩精品91亚洲二区在线观看| 国产日本欧洲亚洲| 欧美丰满少妇xxxxx高潮对白| 国产一区不卡精品| 亚洲动漫第一页| 韩国精品一区二区| 亚洲天堂久久久久久久| 日韩欧美国产一二三区| 91一区在线观看| 国产精品一区二区在线观看不卡| 亚洲永久精品大片| 国产视频911| 日韩欧美国产1| 欧美亚洲自拍偷拍| 国产成人久久精品77777最新版本| 亚洲综合色网站| 欧美激情一区二区三区全黄| 欧美一区二区视频网站| 91久久精品一区二区| 成人激情综合网站| 久久av资源站| 日韩福利视频网| 亚洲福利视频一区| 中文欧美字幕免费| 精品国产第一区二区三区观看体验| 欧美视频一二三区| 91农村精品一区二区在线| 成人黄页毛片网站| 国产精品资源在线看| 麻豆精品久久久| 丝袜国产日韩另类美女| 一区二区三区四区国产精品| 国产精品免费人成网站| 国产亚洲人成网站| 久久婷婷成人综合色| 精品av综合导航| 日韩一区二区免费电影| 欧美一区二区三区人| 欧美理论在线播放| 欧美日韩国产综合一区二区| 91久久精品日日躁夜夜躁欧美| 99久久伊人网影院| 波多野洁衣一区| eeuss国产一区二区三区| 丁香一区二区三区| 国产aⅴ精品一区二区三区色成熟| 久久精品国产免费| 免费成人av资源网| 久久国产三级精品| 国内精品伊人久久久久av一坑| 麻豆91精品视频| 激情欧美一区二区| 国产成人超碰人人澡人人澡| 国产精品综合一区二区三区| 国产精品亚洲а∨天堂免在线| 韩国一区二区视频| 国产成人精品亚洲日本在线桃色| 久久 天天综合| 国产福利电影一区二区三区| 高清不卡在线观看av| av在线不卡观看免费观看| 色综合天天综合网天天狠天天 | 欧美性三三影院| 欧美日韩一区二区三区在线| 91精品国产麻豆国产自产在线 | 日韩精品一二区| 久久精品国产免费看久久精品| 国产裸体歌舞团一区二区| 国产精品一卡二| 99精品黄色片免费大全| 欧洲日韩一区二区三区| 欧美一级在线观看| 久久久久国产精品麻豆ai换脸 | 久久色视频免费观看| 国产精品美女视频| 亚洲午夜av在线| 久久精品二区亚洲w码| 粉嫩蜜臀av国产精品网站| 日本久久一区二区三区| 欧美一区二区观看视频| 国产精品每日更新在线播放网址| 夜色激情一区二区| 精品综合久久久久久8888| youjizz久久| 欧美日韩在线不卡| 久久久99免费| 亚洲一区二区在线免费观看视频 | 亚洲一区二区av在线| 蜜臀av性久久久久蜜臀aⅴ四虎 | 久久蜜桃香蕉精品一区二区三区| 日韩理论在线观看| 久久成人综合网| 91女人视频在线观看| 精品国产乱码久久久久久1区2区 | 色一区在线观看| 日韩欧美国产三级电影视频| 亚洲色大成网站www久久九九| 天天操天天色综合| jlzzjlzz亚洲日本少妇| 欧美一级高清大全免费观看| 国产精品国产成人国产三级| 九色|91porny| 91精彩视频在线观看| 精品999在线播放| 亚洲成人资源网| 91在线云播放| 久久午夜国产精品| 天天综合网 天天综合色| 92国产精品观看| 亚洲国产激情av| 极品少妇xxxx精品少妇偷拍| 欧美日韩综合一区| ...xxx性欧美| 丰满少妇久久久久久久| 日韩欧美在线1卡| 香蕉成人伊视频在线观看| 色婷婷综合中文久久一本| 中文字幕精品在线不卡| 黄色日韩三级电影| 欧美一级免费大片| 性做久久久久久久久| 色悠久久久久综合欧美99| 国产精品免费久久| 国产成人精品三级麻豆| 欧美xxxxxxxx| 免费的成人av| 日韩一区二区免费在线电影| 日韩精品一二三区| 884aa四虎影成人精品一区| 亚洲电影中文字幕在线观看| 欧美在线制服丝袜| 亚洲激情欧美激情| 色婷婷香蕉在线一区二区| 亚洲日本在线看| 在线精品视频免费播放| 亚洲九九爱视频| 欧美自拍丝袜亚洲| 亚洲综合男人的天堂| 欧美三级电影一区| 日韩激情在线观看| 欧美少妇一区二区| 亚洲国产日韩综合久久精品| 在线精品观看国产| 天天综合色天天综合色h| 欧美高清性hdvideosex| 蜜芽一区二区三区| 精品国产一二三区| 国产精品一区二区男女羞羞无遮挡| 久久品道一品道久久精品| 国产高清无密码一区二区三区| 久久久不卡网国产精品二区 | 日本高清视频一区二区| 亚洲精品水蜜桃| 欧美疯狂做受xxxx富婆| 美女视频黄频大全不卡视频在线播放 | 久久―日本道色综合久久| 国产经典欧美精品| 日韩美女视频一区二区| 欧美日韩一区二区在线视频| 日本美女视频一区二区| 精品国产乱码久久久久久图片| 丁香一区二区三区| 亚洲精品写真福利| 制服丝袜日韩国产| 国产精品亚洲第一 | 亚洲成国产人片在线观看| 91精品国产91久久综合桃花| 韩国视频一区二区| 亚洲毛片av在线| 日韩一区二区在线观看视频| 国产成人综合网|