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

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

?? myexplosionview.cpp

?? 用VC++與OPENGL研發的粒子系統的模擬程序
?? CPP
字號:
// MyExplosionView.cpp : implementation of the CMyExplosionView class
//

#include "stdafx.h"
#include "MyExplosion.h"

#include "MyExplosionDoc.h"
#include "MyExplosionView.h"

#include <math.h>
const float pi = 3.1415926;

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

/////////////////////////////////////////////////////////////////////////////
// CMyExplosionView

IMPLEMENT_DYNCREATE(CMyExplosionView, CView)

BEGIN_MESSAGE_MAP(CMyExplosionView, CView)
	//{{AFX_MSG_MAP(CMyExplosionView)
	ON_WM_CREATE()
	ON_WM_DESTROY()
	ON_WM_SIZE()
	ON_WM_TIMER()
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMyExplosionView construction/destruction

CMyExplosionView::CMyExplosionView()
{
	// TODO: add construction code here
	sc=0;
	stop=0;
	alpha=0;
	coef=30;
	counter=100;
	flag_exp=0;
	flag_exp1=0;
	exp_coef=0;
	exp_color = 1;
}

CMyExplosionView::~CMyExplosionView()
{
}

BOOL CMyExplosionView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs
////////////////////////////////////////////////////////////////
//設置窗口類型
	cs.style |=WS_CLIPCHILDREN | WS_CLIPSIBLINGS;
////////////////////////////////////////////////////////////////
	return CView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CMyExplosionView drawing

void CMyExplosionView::OnDraw(CDC* pDC)
{
	CMyExplosionDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: add draw code for native data here
//////////////////////////////////////////////////////////////////
	RenderScene();	//渲染場景
//////////////////////////////////////////////////////////////////

}

/////////////////////////////////////////////////////////////////////////////
// CMyExplosionView printing

BOOL CMyExplosionView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}

void CMyExplosionView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

void CMyExplosionView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}

/////////////////////////////////////////////////////////////////////////////
// CMyExplosionView diagnostics

#ifdef _DEBUG
void CMyExplosionView::AssertValid() const
{
	CView::AssertValid();
}

void CMyExplosionView::Dump(CDumpContext& dc) const
{
	CView::Dump(dc);
}

CMyExplosionDoc* CMyExplosionView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMyExplosionDoc)));
	return (CMyExplosionDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CMyExplosionView message handlers

int CMyExplosionView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CView::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	// TODO: Add your specialized creation code here
//////////////////////////////////////////////////////////////////
//初始化OpenGL和設置定時器
	m_pDC = new CClientDC(this);
	SetTimer(1, 20, NULL);
	InitializeOpenGL(m_pDC);
//////////////////////////////////////////////////////////////////
	LoadTexture(0);
	glEnable(GL_TEXTURE_2D);
	glEnable(GL_DEPTH_TEST);
	textures.Init();
	ship.LoadFromFile("data/ship.obj", &textures);
	glCullFace(GL_BACK);
	glEnable(GL_CULL_FACE);
	glBlendFunc(GL_SRC_ALPHA, GL_ONE);
	glEnable(GL_BLEND);	

	return 0;
}

void CMyExplosionView::OnDestroy() 
{
	CView::OnDestroy();
	
	// TODO: Add your message handler code here
/////////////////////////////////////////////////////////////////
//刪除調色板和渲染上下文、定時器
	::wglMakeCurrent(0,0);
	::wglDeleteContext( m_hRC);
	if (m_hPalette)
	    DeleteObject(m_hPalette);
	if ( m_pDC )
	{
		delete m_pDC;
	}
	KillTimer(1);		
/////////////////////////////////////////////////////////////////
	
}

void CMyExplosionView::OnSize(UINT nType, int cx, int cy) 
{
	CView::OnSize(nType, cx, cy);
	
	// TODO: Add your message handler code here
/////////////////////////////////////////////////////////////////
//添加窗口縮放時的圖形變換函數
	glViewport(0,0,cx,cy);
/////////////////////////////////////////////////////////////////
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	glFrustum(-5, 5, -5, 5, 3, 250);
	glMatrixMode(GL_MODELVIEW);	
}

void CMyExplosionView::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
/////////////////////////////////////////////////////////////////
//添加定時器響應函數和場景更新函數
	Invalidate(FALSE);	
/////////////////////////////////////////////////////////////////
	
	CView::OnTimer(nIDEvent);
}

/////////////////////////////////////////////////////////////////////
//	                  設置邏輯調色板
//////////////////////////////////////////////////////////////////////
void CMyExplosionView::SetLogicalPalette(void)
{
    struct
    {
        WORD Version;
        WORD NumberOfEntries;
        PALETTEENTRY aEntries[256];
    } logicalPalette = { 0x300, 256 };

	BYTE reds[] = {0, 36, 72, 109, 145, 182, 218, 255};
	BYTE greens[] = {0, 36, 72, 109, 145, 182, 218, 255};
	BYTE blues[] = {0, 85, 170, 255};

    for (int colorNum=0; colorNum<256; ++colorNum)
    {
        logicalPalette.aEntries[colorNum].peRed =
            reds[colorNum & 0x07];
        logicalPalette.aEntries[colorNum].peGreen =
            greens[(colorNum >> 0x03) & 0x07];
        logicalPalette.aEntries[colorNum].peBlue =
            blues[(colorNum >> 0x06) & 0x03];
        logicalPalette.aEntries[colorNum].peFlags = 0;
    }

    m_hPalette = CreatePalette ((LOGPALETTE*)&logicalPalette);
}


//////////////////////////////////////////////////////////
//						初始化openGL場景
//////////////////////////////////////////////////////////
BOOL CMyExplosionView::InitializeOpenGL(CDC* pDC)
{
	m_pDC = pDC;
	SetupPixelFormat();
	//生成繪制描述表
	m_hRC = ::wglCreateContext(m_pDC->GetSafeHdc());
	//置當前繪制描述表
	::wglMakeCurrent(m_pDC->GetSafeHdc(), m_hRC);

	return TRUE;
}

//////////////////////////////////////////////////////////
//						設置像素格式
//////////////////////////////////////////////////////////
BOOL CMyExplosionView::SetupPixelFormat()
{
	PIXELFORMATDESCRIPTOR pfd = { 
	    sizeof(PIXELFORMATDESCRIPTOR),    // pfd結構的大小 
	    1,                                // 版本號 
	    PFD_DRAW_TO_WINDOW |              // 支持在窗口中繪圖 
	    PFD_SUPPORT_OPENGL |              // 支持 OpenGL 
	    PFD_DOUBLEBUFFER,                 // 雙緩存模式 
	    PFD_TYPE_RGBA,                    // RGBA 顏色模式 
	    24,                               // 24 位顏色深度 
	    0, 0, 0, 0, 0, 0,                 // 忽略顏色位 
	    0,                                // 沒有非透明度緩存 
	    0,                                // 忽略移位位 
	    0,                                // 無累加緩存 
	    0, 0, 0, 0,                       // 忽略累加位 
	    32,                               // 32 位深度緩存     
	    0,                                // 無模板緩存 
	    0,                                // 無輔助緩存 
	    PFD_MAIN_PLANE,                   // 主層 
	    0,                                // 保留 
	    0, 0, 0                           // 忽略層,可見性和損毀掩模 
	}; 	
	int pixelformat;
	pixelformat = ::ChoosePixelFormat(m_pDC->GetSafeHdc(), &pfd);//選擇像素格式
	::SetPixelFormat(m_pDC->GetSafeHdc(), pixelformat, &pfd);	//設置像素格式
	if(pfd.dwFlags & PFD_NEED_PALETTE)
		SetLogicalPalette();	//設置邏輯調色板
	return TRUE;
}



//////////////////////////////////////////////////////////
//						場景繪制與渲染
//////////////////////////////////////////////////////////
BOOL CMyExplosionView::RenderScene() 
{
	float cx, cy, cz;
	float px, py, pz;
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  	glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
	glLoadIdentity();
	glTranslatef(0, 0, -100);
	glColor3f(1, 1, 1);
	glRotatef(alpha, 0, 1, 0);
	glRotatef(-120, 1, 0, 0);
	alpha += 2;
	glDisable(GL_BLEND);
	counter--;
	if (counter < 0) counter = 0;
	if ((counter == 0) && (!flag_exp))
	{
		ship.Explosion();
		flag_exp = 1;
	}
	if (flag_exp1)
	{	
		ship.Explosion_Step(coef);
		coef -= coef/30;
	}
	if (coef < 0) coef = 0;
	ship.Draw();
	glEnable(GL_BLEND);
	// 繪制爆炸后的多邊形
	// cx, cy, cz - 攝像機方向矢量
	// px, py, pz - 多邊形方向矢量
	if (flag_exp)
	{
		cx = 0;
		cy = 0;
		cz = 1;
		px = cx;
		py = cy;
		pz = -cz;
		float d = sqrt(px*px + py*py + pz*pz);
		px /= d;
		py /= d;
		pz /= d;
		float phi, theta;
		theta = asin(pz);
		phi = asin(py/cos(theta));
		theta = (theta*180)/pi;
		phi = (phi*180)/pi;
		glLoadIdentity();
		glTranslatef(0, 0, -180);
		glRotatef(phi, 1, 0, 0);
		glRotatef(theta, 0, 1, 0);
		glBindTexture(GL_TEXTURE_2D, texture[0]);
		glScalef(exp_coef, exp_coef, exp_coef);
		exp_coef += exp_coef/20 + 0.1;
		if (exp_coef > 0.5) flag_exp1 = 1;
		glColor4f(1, 1, 1, exp_color);
		if (flag_exp1) exp_color -= 0.05;
		glBegin(GL_QUADS);
			glTexCoord2f(0, 1); glVertex3f(0, -100, -100);
			glTexCoord2f(0, 0); glVertex3f(0, 100, -100);
			glTexCoord2f(1, 0); glVertex3f(0, 100, 100);
			glTexCoord2f(1, 1); glVertex3f(0, -100, 100);
		glEnd();
	}
	glFlush();  

	::SwapBuffers(m_pDC->GetSafeHdc());		//交互緩沖區
	return TRUE;
}

void CMyExplosionView::LoadTexture(int t_num)
{
	int texwid, texht;
	int texcomps;
    char fn[]="data/vzr.rgb";
	teximage = m_Tex->read_texture(fn, &texwid, &texht, &texcomps);
	if (!teximage)
	{
		MessageBox("Sorry, can't read texture file...","Error",MB_OK);
		exit(0);
	}
	glBindTexture(GL_TEXTURE_2D, texture[t_num]);
	glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
	glTexImage2D(GL_TEXTURE_2D, 0, 3, texwid, texht, 0, GL_RGBA, GL_UNSIGNED_BYTE, teximage);
	gluBuild2DMipmaps(GL_TEXTURE_2D, 3, texwid, texht, GL_RGBA, GL_UNSIGNED_BYTE, teximage);
	glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); 
	glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR_MIPMAP_LINEAR); 
	free(teximage);
} 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
青青国产91久久久久久| 在线视频你懂得一区二区三区| 悠悠色在线精品| 国产精品乱人伦| 国产精品乱码一区二区三区软件 | 国产精品色在线观看| 久久久精品欧美丰满| 精品久久一二三区| 久久噜噜亚洲综合| 欧美精品一区二区三区久久久| 久久综合色天天久久综合图片| 精品粉嫩aⅴ一区二区三区四区| 欧美精品一区二区高清在线观看 | av日韩在线网站| 国产成人在线观看免费网站| 99这里只有精品| 欧美性大战久久久久久久 | 337p粉嫩大胆噜噜噜噜噜91av | 国产美女在线观看一区| 三级亚洲高清视频| 国产一区二区在线免费观看| 不卡的av在线播放| 欧美三区在线观看| 精品国产伦一区二区三区观看方式 | 成年人网站91| 欧洲在线/亚洲| 精品国产一区二区三区忘忧草| 久久久美女毛片| 亚洲精品欧美二区三区中文字幕| 亚洲国产一区视频| 韩国精品主播一区二区在线观看| 国产剧情av麻豆香蕉精品| www.爱久久.com| 欧美一级欧美三级| 亚洲六月丁香色婷婷综合久久| 日本欧美肥老太交大片| 成人理论电影网| 91精品麻豆日日躁夜夜躁| 国产欧美久久久精品影院| 亚洲欧美二区三区| 国产精品一区一区三区| 69堂精品视频| 亚洲丝袜美腿综合| 国产美女一区二区三区| 欧美顶级少妇做爰| 樱桃视频在线观看一区| 国产乱码精品1区2区3区| 欧美在线免费观看亚洲| 久久久99精品免费观看| 日本成人中文字幕在线视频 | 亚洲一区二区三区四区在线| 精品一区二区三区免费观看| 欧美伊人精品成人久久综合97 | 一区二区三区在线免费| 国产毛片精品视频| 91精品国产综合久久久久久久 | 亚洲综合一区二区三区| 国产成人午夜99999| 欧美电影免费提供在线观看| 亚洲午夜羞羞片| 色综合久久久久久久| 在线电影欧美成精品| 亚洲精品视频在线观看免费 | 日韩精品一区国产麻豆| 久久婷婷综合激情| 香蕉影视欧美成人| 欧美午夜寂寞影院| 亚洲综合色噜噜狠狠| 天天综合色天天| 欧美三级三级三级爽爽爽| 在线播放91灌醉迷j高跟美女| 欧美大胆一级视频| 不卡区在线中文字幕| 日本一区二区三区国色天香| 国产精品一区二区无线| 国产亚洲精品aa午夜观看| 国产一区二区视频在线播放| 精品国产成人在线影院| 国产一区视频网站| 国产亚洲欧美激情| 成人av在线观| 亚洲人亚洲人成电影网站色| 色综合天天在线| 亚洲免费av网站| 91福利小视频| 首页国产欧美日韩丝袜| 91精品国产欧美一区二区成人| 日日夜夜免费精品视频| 欧美一区二区三级| 国产自产v一区二区三区c| 国产亚洲欧美一级| voyeur盗摄精品| 洋洋av久久久久久久一区| 欧美日韩日本视频| 欧美aⅴ一区二区三区视频| 日韩欧美一二三四区| 国产乱子伦一区二区三区国色天香| 久久夜色精品国产噜噜av| 国产精品香蕉一区二区三区| 中文字幕中文字幕在线一区 | 91精品国产综合久久福利软件 | 欧美丰满一区二区免费视频 | 亚洲国产精品久久艾草纯爱| 欧美精品色一区二区三区| 久久爱www久久做| 国产精品美女久久久久久| 91麻豆国产在线观看| 午夜欧美视频在线观看 | 国产精品久久777777| 在线观看亚洲一区| 久久国产精品区| 国产精品久久久久一区二区三区| 色综合久久99| 麻豆国产精品一区二区三区| 中文字幕一区二区三区蜜月| 欧美日韩精品专区| 国产成人精品aa毛片| 亚洲一区二区三区国产| 国产亚洲一区二区三区四区| 欧美群妇大交群的观看方式 | 1024成人网| 日韩一区二区免费在线电影| 99国产精品久久久久久久久久 | 精品夜夜嗨av一区二区三区| 国产丝袜美腿一区二区三区| 欧美性受xxxx黑人xyx性爽| 国产成人亚洲精品狼色在线 | 欧美v日韩v国产v| 91免费在线看| 国产精品亚洲成人| 五月激情六月综合| 亚洲欧美日韩精品久久久久| 久久综合久久久久88| 欧美电影一区二区三区| 欧美综合视频在线观看| caoporn国产精品| 高清国产一区二区三区| 国产一区二区成人久久免费影院| 亚洲成人午夜影院| 一区二区三区四区在线| 国产精品亲子伦对白| 久久久久9999亚洲精品| 精品毛片乱码1区2区3区 | 日韩在线观看一区二区| 亚洲色图一区二区三区| 国产视频不卡一区| 久久精品一区八戒影视| 欧美大片拔萝卜| 精品国产一区二区三区久久久蜜月| 欧美区在线观看| 欧美日本精品一区二区三区| 91久久精品午夜一区二区| 99久久精品99国产精品 | 亚洲国产欧美日韩另类综合| 亚洲素人一区二区| 国产精品福利影院| 26uuu亚洲| 国产日韩欧美精品电影三级在线| 91精品国产综合久久精品图片 | 国产精品18久久久久久久网站| 欧美a级理论片| 免费观看在线综合色| 日韩成人av影视| 另类专区欧美蜜桃臀第一页| 久久97超碰国产精品超碰| 蜜臀久久99精品久久久久宅男| 奇米综合一区二区三区精品视频| 天天色综合成人网| 久久aⅴ国产欧美74aaa| 国产一区二区在线视频| 国产精品一区二区男女羞羞无遮挡 | 国产精品18久久久久| 国产精品一区一区| 91免费视频观看| 在线亚洲人成电影网站色www| 欧美性猛交xxxx乱大交退制版| 欧美日韩亚洲综合在线| 欧美一区二区在线视频| 亚洲精品一区二区三区精华液| 国产区在线观看成人精品| 亚洲欧洲成人av每日更新| 亚洲午夜精品17c| 精品综合免费视频观看| 99麻豆久久久国产精品免费 | 日本伊人午夜精品| 成人app软件下载大全免费| 欧美精品久久天天躁| 国产日韩视频一区二区三区| 亚洲人成伊人成综合网小说| 日本视频免费一区| av在线不卡网| 日韩精品一区二区三区视频播放 | 91免费国产视频网站| 7777精品伊人久久久大香线蕉超级流畅| 欧美一区二区三区在线看| 欧美激情一区二区三区不卡| 亚洲国产欧美日韩另类综合| 国产精品99久| 欧美精品aⅴ在线视频| 国产精品久久久久精k8 |