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

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

?? childview.cpp

?? 采用OGL生成的雪景,很實用,可以寫出類似天氣變化的程序
?? CPP
字號:
// ChildView.cpp : implementation of the CChildView class
//

#include "stdafx.h"
#include "SnowWorld.h"
#include "ChildView.h"

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

GLfloat LightAmbient  [] = { 0.5f, 0.5f, 0.5f, 1.0f };
GLfloat LightDiffuse  [] = { 1.0f, 1.0f, 1.0f, 1.0f };
GLfloat LightPosition [] = { 0.0f, 0.0f, 2.0f, 1.0f };

/////////////////////////////////////////////////////////////////////////////
// CChildView

CChildView::CChildView()
{
	m_pClientDC = NULL;
	m_lpThread  = NULL;

	m_nFloorIndex = 0;
}

CChildView::~CChildView()
{
	if ( m_lpThread != NULL )
	{
		delete m_lpThread;
		m_lpThread = NULL;
	}
}


BEGIN_MESSAGE_MAP(CChildView,CWnd )
	//{{AFX_MSG_MAP(CChildView)
	ON_WM_CREATE()

	ON_WM_SIZE()

	ON_WM_ERASEBKGND()
	ON_WM_PAINT()
	
	ON_WM_TIMER()

	ON_WM_DESTROY()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()


/////////////////////////////////////////////////////////////////////////////
// CChildView message handlers

BOOL CChildView::PreCreateWindow(CREATESTRUCT& cs) 
{
	if ( ! CWnd::PreCreateWindow( cs ) )
		return FALSE;

	cs.dwExStyle |= WS_EX_CLIENTEDGE;
	cs.style &= ~WS_BORDER;
	cs.lpszClass = AfxRegisterWndClass( CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS, 
		::LoadCursor( NULL, IDC_ARROW ), HBRUSH( COLOR_WINDOW + 1 ), NULL );

	return TRUE;
}

BOOL CChildView::PreTranslateMessage( MSG* pMsg )
{
	if ( pMsg->message == WM_KEYDOWN && ( pMsg->wParam == VK_RETURN || pMsg->wParam == VK_SPACE ) )
	{
		if ( ++m_nFloorIndex >= 3 )
			m_nFloorIndex = 0;
	}

	return CWnd::PreTranslateMessage( pMsg );
}

int CChildView::OnCreate( LPCREATESTRUCT lpCreateStruct )
{
	if ( CWnd::OnCreate( lpCreateStruct ) == -1 )
	{
		TRACE0( "Failed to create the CChildView" );
		return -1;
	}

	m_lpThread = AfxBeginThread( Thread, NULL, THREAD_PRIORITY_NORMAL, 0, CREATE_SUSPENDED );
	ASSERT( m_lpThread );

	InitOpenGL();

	SetTimer( 1, 50, NULL );

	m_lpThread->ResumeThread();
	return 0;
}

void CChildView::OnSize( UINT nType, int cx, int cy )
{
	CWnd::OnSize( nType, cx, cy );

	if ( cy == 0 )
		cy = 1;

	glViewport( 0, 0, cx, cy );		// Reset The Current View-port
	glMatrixMode( GL_PROJECTION );	// Select The Projection Matrix
	glLoadIdentity();				// Reset The Projection Matrix		

	// Calculate The Aspect Ratio Of The Window
	gluPerspective( 45.0f, ( GLfloat ) cx / ( GLfloat ) cy, 0.1f, 400.0f );
	glMatrixMode( GL_MODELVIEW );	// Select The Model-view Matrix
	glLoadIdentity();		
}

void CChildView::OnPaint() 
{
	CPaintDC dc(this); // device context for painting
	CBitmap bitmap;
	bitmap.LoadBitmap( IDB_SNOW_FLOOR );

	// TODO: Add your message handler code here
	DrawOpenGLScene();
	// Do not call CWnd::OnPaint() for painting messages
}

BOOL CChildView::OnEraseBkgnd( CDC* pDC )
{
	UNREFERENCED_PARAMETER( pDC );

	return TRUE;
}

void CChildView::OnDestroy()
{
	HGLRC hrc = NULL;
	hrc = ::wglGetCurrentContext();

	::wglMakeCurrent( NULL, NULL );
	if ( hrc != NULL )
		::wglDeleteContext( hrc );

	if ( m_pClientDC != NULL )
	{
		delete m_pClientDC;
		m_pClientDC = NULL;
	}
	ASSERT( m_pClientDC == NULL );

	CWnd::OnDestroy();
}

// Initialize the OpenGL context device...

VOID CChildView::InitOpenGL()
{
	m_pClientDC = new CClientDC( this );
	ASSERT( m_pClientDC != NULL );
	ASSERT_VALID( m_pClientDC );

	if ( ! SetupPixelFormat() )
		return;

	PIXELFORMATDESCRIPTOR pfd;

	int n = ::GetPixelFormat( m_pClientDC->GetSafeHdc());
	::DescribePixelFormat( m_pClientDC->GetSafeHdc(), n, sizeof( pfd ), & pfd );

	HGLRC hrc = NULL;
	hrc = wglCreateContext( m_pClientDC->GetSafeHdc() );
	ASSERT( hrc );
	wglMakeCurrent( m_pClientDC->GetSafeHdc(), hrc );

	if ( ! LoadOpenGLTextures() )
		return;

	glEnable( GL_TEXTURE_2D );
	glShadeModel( GL_SMOOTH );				// Enable Smooth Shading
	glClearColor( 0.5f, 0.5f, 0.5f, 0.5f );	// Black Background
	glClearDepth( 1.0f );					// Depth Buffer Setup

	glHint( GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST );	// Really Nice Perspective Calculations

	glLightfv( GL_LIGHT1, GL_AMBIENT,  LightAmbient  );
	glLightfv( GL_LIGHT1, GL_DIFFUSE,  LightDiffuse  );
	glLightfv( GL_LIGHT1, GL_POSITION, LightPosition );
	glEnable( GL_LIGHT1 );
	
	glBlendFunc( GL_SRC_ALPHA,GL_ONE );		// Set The Blending Function For Translucency
	glEnable( GL_BLEND );	
}

// Load the texture from the define file path

BOOL CChildView::LoadOpenGLTextures()
{
	glGenTextures( E_TEXTURECOUNT, & m_textureSnow[ 0 ] );
	LoadImageFromResID( IDB_SNOW_LARGE,  m_textureSnow[ 0 ] );
	LoadImageFromResID( IDB_SNOW_MIDDLE, m_textureSnow[ 1 ] );
	LoadImageFromResID( IDB_SNOW_SMALL,  m_textureSnow[ 2 ] );

	InitSnow();

	LoadImageFromResID( IDB_SNOW_MIDDLE, m_textureSnow[ 3 ] );

	return TRUE;
}

VOID CChildView::SetDefaultTextureParams()
{
	glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
	glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
} 

BOOL CChildView::SetupPixelFormat()
{
	static PIXELFORMATDESCRIPTOR pfd = {
		sizeof( PIXELFORMATDESCRIPTOR ),// size of this pfd
		1,                              // version number
		PFD_DRAW_TO_WINDOW |            // support window
			PFD_SUPPORT_OPENGL |        // support OpenGL
			PFD_DOUBLEBUFFER,           // double buffered
		PFD_TYPE_RGBA,                  // RGBA type
		24,                             // 24-bit color depth
		0, 0, 0, 0, 0, 0,               // color bits ignored
		0,                              // no alpha buffer
		0,                              // shift bit ignored
		0,                              // no accumulation buffer
		0, 0, 0, 0,                     // accum bits ignored
		32,                             // 32-bit z-buffer
		0,                              // no stencil buffer
		0,                              // no auxiliary buffer
		PFD_MAIN_PLANE,                 // main layer
		0,                              // reserved
		0, 0, 0                         // layer masks ignored
	};

	int pixelformat = 0;

	ASSERT( m_pClientDC != NULL );
	if ( ( pixelformat = ChoosePixelFormat( m_pClientDC->GetSafeHdc(), & pfd ) ) == 0 )
	{
		AfxMessageBox( _T( "ChoosePixelFormat failed" ) );
		return FALSE;
	}

	if ( SetPixelFormat( m_pClientDC->GetSafeHdc(), pixelformat, & pfd ) == FALSE )
	{
		AfxMessageBox( _T( "SetPixelFormat failed" ) );
		return FALSE;
	}

	return TRUE;
}

VOID CChildView::DrawOpenGLScene()
{
	static GLfloat wAngleY = 10.0f;

	glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );

	glLoadIdentity();
	glTranslatef( 0.0f, -30.0f, -150.0f );
	glRotatef( wAngleY, 0.0f, 1.0f, 0.0f );

	glBindTexture( GL_TEXTURE_2D, m_textureSnow[ m_nFloorIndex ] );

	glColor4f( 1.0f, 1.0f, 1.0f, 0.5 );

	glBegin( GL_QUADS );
		glNormal3f( 0.0f, 1.0f, 0.0f );
		glTexCoord2f( 0.0f, 0.0f ); glVertex3f(  100.0f, 0.0f, -100.0f );
		glTexCoord2f( 1.0f, 0.0f ); glVertex3f(  100.0f, 0.0f,  100.0f );
		glTexCoord2f( 1.0f, 1.0f ); glVertex3f( -100.0f, 0.0f,  100.0f );
		glTexCoord2f( 0.0f, 1.0f ); glVertex3f( -100.0f, 0.0f, -100.0f );
	glEnd();

	for ( int nIndex = 0; nIndex < E_SNOWCOUNT; nIndex++ )
	{
		glLoadIdentity();
		glTranslatef( 0.0f, -30.0f, -150.0f ); 
		glRotatef( wAngleY, 0.0f, 1.0f, 0.0f );

		glBindTexture( GL_TEXTURE_2D, m_textureSnow[ m_snow[ nIndex ].nIndexTexture ] );
		glTranslatef( m_snow[ nIndex ].x, m_snow[ nIndex ].y, m_snow[ nIndex ].z );

		glRotatef( m_snow[ nIndex ].xrot, 1.0f, 0.0f, 0.0f );
		glRotatef( m_snow[ nIndex ].yrot, 0.0f, 1.0f, 0.0f );
		glRotatef( m_snow[ nIndex ].zrot, 0.0f, 0.0f, 1.0f );

		glBegin( GL_QUADS );
			glNormal3f( 0.0f, 1.0f, 0.0f );
			glTexCoord2f( 0.0f, 0.0f ); glVertex3f(  1.0f, 0.0f, -1.0f );
			glTexCoord2f( 1.0f, 0.0f ); glVertex3f(  1.0f, 0.0f,  1.0f );
			glTexCoord2f( 1.0f, 1.0f ); glVertex3f( -1.0f, 0.0f,  1.0f );
			glTexCoord2f( 0.0f, 1.0f ); glVertex3f( -1.0f, 0.0f, -1.0f );
		glEnd();

		m_snow[ nIndex ].y -= m_snow[ nIndex ].dropSpeed;
		if( m_snow[ nIndex ].y < -33 )
			m_snow[ nIndex ].y = 125.0f;

		m_snow[ nIndex ].xrot += m_snow[ nIndex ].rotSpeed;
		m_snow[ nIndex ].yrot += m_snow[ nIndex ].rotSpeed;
		m_snow[ nIndex ].zrot += m_snow[ nIndex ].rotSpeed;
	}

	wAngleY += 0.2f;

	glFinish();
	SwapBuffers( wglGetCurrentDC() );
}

BOOL CChildView::LoadImageFromResID( UINT nResID, GLuint& texture )
{
	ASSERT( nResID > 0 );

	HBITMAP hBitmap = ( HBITMAP ) LoadImage( \
									AfxGetInstanceHandle(), \
									MAKEINTRESOURCE( nResID ), \
									IMAGE_BITMAP, \
									0, 0, \
									LR_CREATEDIBSECTION );
	ASSERT( hBitmap != NULL );

	DIBSECTION ds;
	GetObject( hBitmap, sizeof( DIBSECTION ), ( LPVOID ) & ds );

	glBindTexture( GL_TEXTURE_2D, texture );
	SetDefaultTextureParams();

	glTexImage2D( GL_TEXTURE_2D, 0, 3, ds.dsBm.bmWidth, ds.dsBm.bmHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, ds.dsBm.bmBits );
	DeleteObject( hBitmap );

	return TRUE;
}

void CChildView::OnTimer( UINT nIDEvent )
{
	DrawOpenGLScene();

	CWnd::OnTimer( nIDEvent );

	// Eat spurious WM_TIMER message
	MSG msg;
	while( ::PeekMessage( & msg, m_hWnd, WM_TIMER, WM_TIMER, PM_REMOVE ) )
		;
}

VOID CChildView::InitSnow()
{
	srand( GetTickCount() );

	for ( int nIndex = 0; nIndex < E_SNOWCOUNT; nIndex++ )
	{
		m_snow[ nIndex ].nIndexTexture = rand() % 3;

		m_snow[ nIndex ].x = GLfloat( rand() % 200 - 100 );
		m_snow[ nIndex ].y = GLfloat( rand() % 200 - 100 );
		m_snow[ nIndex ].z = 100.0f + GLfloat( rand() % 25 );
	}

	for ( int i = 0; i < E_SNOWCOUNT; i++ )
	{
		m_snow[ i ].nIndexTexture = rand() % 3;
		m_snow[ i ].x             = GLfloat( rand() % 200 - 100 );
		m_snow[ i ].z             = GLfloat( rand() % 200 - 100 );
		m_snow[ i ].y             = 100.0f + GLfloat( rand() % 25 );

		m_snow[ i ].xrot          = 0;
		m_snow[ i ].yrot          = 0;
		m_snow[ i ].zrot          = 0;

		m_snow[ i ].dropSpeed     = 0.01f * ( rand() % 50 + 2 );
		m_snow[ i ].rotSpeed      =  0.1f * ( rand() % 10 + 2 );
	}
}

// The thread which will play the music
//  for the scene...

UINT CChildView::Thread( LPVOID lParam )
{
	UNREFERENCED_PARAMETER( lParam );

	for ( ; ; )
	{
		HRSRC hResInfo = FindResource( AfxGetInstanceHandle(), MAKEINTRESOURCE( IDR_MUSIC_SNOW ), "WAVE" );
		ASSERT( hResInfo );
		HRSRC hRes = ( HRSRC ) LoadResource( AfxGetInstanceHandle(), hResInfo );
		ASSERT( hRes );
		LPSTR lpRes = ( LPSTR ) LockResource(hRes);
        sndPlaySound(lpRes, SND_MEMORY | SND_SYNC | SND_NODEFAULT ); 
		FreeResource( hRes ); 
	}

	return 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧洲国内综合视频| 中文字幕一区av| 91国内精品野花午夜精品| 粉嫩一区二区三区性色av| 九九国产精品视频| 国产伦精品一区二区三区免费迷| 视频在线观看国产精品| 三级久久三级久久久| 另类的小说在线视频另类成人小视频在线 | 亚洲aⅴ怡春院| 中文字幕一区二区三区在线观看| 国产精品色在线| 一区在线观看视频| 亚洲成年人影院| 国产精品国产三级国产普通话蜜臀| 伦理电影国产精品| 久久er99精品| 粉嫩在线一区二区三区视频| aaa国产一区| 在线不卡免费欧美| 日韩免费福利电影在线观看| 国产三区在线成人av| 国产精品久久久久久福利一牛影视| 亚洲手机成人高清视频| 亚洲精品老司机| 久久国产成人午夜av影院| 国产精品一区二区久久精品爱涩| 99精品欧美一区二区蜜桃免费| 欧美视频一区二区三区四区| 91精品国产一区二区三区蜜臀| 亚洲国产高清在线| 亚洲电影中文字幕在线观看| 看电影不卡的网站| 国产精品一区二区三区乱码| 欧洲亚洲国产日韩| 久久综合九色综合97婷婷| 国产精品夫妻自拍| 激情综合五月婷婷| 欧美日本在线播放| 久久久蜜桃精品| 日韩精品成人一区二区在线| 成人一区二区在线观看| 欧美日韩成人一区| 亚洲天天做日日做天天谢日日欢| 日韩国产一区二| 成人18精品视频| 日韩一区二区三| 亚洲精品伦理在线| 亚洲综合久久久久| 亚洲国产欧美一区二区三区丁香婷| 亚洲成在人线免费| 97se亚洲国产综合在线| 日韩一区二区免费电影| 夜夜嗨av一区二区三区网页| 成人国产在线观看| 欧美精品一区二区三区高清aⅴ | 337p亚洲精品色噜噜狠狠| 欧美激情一区二区| 日本亚洲视频在线| 欧美日韩不卡一区| 亚洲日本欧美天堂| 不卡视频一二三| 久久综合狠狠综合久久综合88 | 日韩免费电影一区| 亚洲国产精品久久不卡毛片 | 日韩午夜精品视频| 亚洲国产精品一区二区久久恐怖片| 成人av资源网站| 中文字幕不卡的av| 国产激情一区二区三区四区| 精品精品国产高清a毛片牛牛 | 精品无码三级在线观看视频 | 国产精品一区二区黑丝| 欧美一区二区久久久| 日本sm残虐另类| 丁香婷婷综合激情五月色| 在线亚洲+欧美+日本专区| 亚洲视频香蕉人妖| 91久久精品网| 性感美女极品91精品| 欧美男男青年gay1069videost| 一片黄亚洲嫩模| 欧美乱妇15p| 久久精品久久精品| 久久视频一区二区| av色综合久久天堂av综合| 成人欧美一区二区三区小说 | 在线免费观看一区| 亚洲h在线观看| 91精品国模一区二区三区| 日韩制服丝袜av| 2021国产精品久久精品| 丁香天五香天堂综合| 自拍偷在线精品自拍偷无码专区 | 欧美在线三级电影| 日本不卡视频一二三区| 久久综合五月天婷婷伊人| 国产成人精品网址| 亚洲福利一区二区三区| 日韩一区二区三区在线| 国产乱子轮精品视频| 国产精品乱人伦| 欧美视频在线观看一区| 洋洋成人永久网站入口| 首页欧美精品中文字幕| 精品国产伦一区二区三区观看体验| 国产一区二区看久久| 亚洲国产精品黑人久久久| 色av成人天堂桃色av| 免费欧美在线视频| 亚洲欧洲av一区二区三区久久| 一道本成人在线| 一区二区在线看| 日韩精品一区在线观看| 色综合久久久久综合| 日韩福利电影在线| 国产精品久久久久婷婷二区次| 欧美日韩精品久久久| 国产精品自在欧美一区| 三级亚洲高清视频| 国产精品毛片无遮挡高清| 56国语精品自产拍在线观看| av影院午夜一区| 久久99精品久久久| 亚洲观看高清完整版在线观看| 久久精品在这里| 日韩欧美一区二区三区在线| av亚洲精华国产精华精| 国产精品888| 日韩成人精品视频| 亚洲国产精品一区二区尤物区| 国产亚洲欧美色| 欧美tk丨vk视频| 91精选在线观看| 欧美少妇一区二区| 91免费看视频| 九九精品一区二区| 欧美久久久久久蜜桃| 99国产欧美另类久久久精品| 久热成人在线视频| 久久精品国产**网站演员| 亚洲一区二区三区四区五区黄| 亚洲天堂2014| 国产亚洲1区2区3区| 91精品啪在线观看国产60岁| 国产福利一区二区三区在线视频| 久久精品国产亚洲a| 亚洲狼人国产精品| 亚洲精品视频免费看| 国产精品久久久久久久久免费樱桃| 欧美成人bangbros| 99视频国产精品| 91猫先生在线| 精品1区2区3区| 91亚洲国产成人精品一区二三 | 欧美videos大乳护士334| 欧美午夜免费电影| 色婷婷激情综合| 在线视频观看一区| 欧美日本一区二区三区| 欧美精品高清视频| 精品少妇一区二区三区在线播放| 欧美电影免费提供在线观看| 日韩视频在线观看一区二区| 欧美一卡二卡三卡四卡| 精品剧情v国产在线观看在线| 9191成人精品久久| av激情亚洲男人天堂| 欧美影片第一页| 色婷婷av一区二区三区软件| 五月天久久比比资源色| 久久国产精品99久久久久久老狼| 热久久免费视频| 国内精品写真在线观看| 国产一区二三区好的| 国产精品1区2区3区在线观看| 国产一区二区视频在线播放| 国产精品18久久久久| 91麻豆国产自产在线观看| 欧美日韩国产精品成人| 日韩欧美激情四射| 综合激情网...| 亚洲va韩国va欧美va精品| 韩国精品主播一区二区在线观看| 岛国精品在线播放| 欧美日韩性生活| 国产日韩精品一区二区三区| 亚洲午夜一区二区三区| 国产乱人伦偷精品视频免下载| 日本二三区不卡| 欧美一区二区三区在线视频| 国产精品情趣视频| 日韩精品91亚洲二区在线观看| 国产精品2024| 7777精品伊人久久久大香线蕉经典版下载 | 99久久婷婷国产| 91精品国产乱码久久蜜臀| 欧美国产综合一区二区| 日本午夜精品一区二区三区电影| 国产**成人网毛片九色|