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

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

?? toon.cpp

?? Direct 9.0 游戲編程 包括PDF書(shū)籍和源代碼
?? CPP
字號(hào):
//////////////////////////////////////////////////////////////////////////////////////////////////
// 
// File: toon.cpp
// 
// Author: Frank Luna (C) All Rights Reserved
//
// System: AMD Athlon 1800+ XP, 512 DDR, Geforce 3, Windows XP, MSVC++ 7.0 
//
// Desc: Demonstrates toon rendering with silhouette edges outlined using a
//       vertex shader.  Note that you will have to switch to the REF device 
//       to view this sample if your graphics card does not support vertex shaders.  Or you
//       can use software vertex processing: D3DCREATE_SOFTWARE_VERTEXPROCESSING.
//          
//////////////////////////////////////////////////////////////////////////////////////////////////

#include "d3dUtility.h"
#include "silhouetteEdges.h"

//
// Globals
//

IDirect3DDevice9* Device = 0; 

const int Width  = 640;
const int Height = 480;

IDirect3DVertexShader9* ToonShader = 0;
ID3DXConstantTable* ToonConstTable = 0;

ID3DXMesh*  Meshes[4] = {0, 0, 0, 0};
D3DXMATRIX  WorldMatrices[4];
D3DXVECTOR4 MeshColors[4];

D3DXMATRIX ProjMatrix;

IDirect3DTexture9* ShadeTex  = 0;

D3DXHANDLE ToonWorldViewHandle     = 0;
D3DXHANDLE ToonWorldViewProjHandle = 0;
D3DXHANDLE ToonColorHandle    = 0;
D3DXHANDLE ToonLightDirHandle = 0;

SilhouetteEdges* MeshOutlines[4] = {0, 0, 0, 0};
IDirect3DVertexShader9* OutlineShader = 0;
ID3DXConstantTable* OutlineConstTable = 0;

D3DXHANDLE OutlineWorldViewHandle = 0;
D3DXHANDLE OutlineProjHandle = 0;

//
// Framework functions
//
bool Setup()
{
	HRESULT hr = 0;

	//
	// Create geometry and compute corresponding world matrix and color
	// for each mesh.
	//

	ID3DXBuffer* adjBuffer[4] = {0, 0, 0, 0};

	D3DXCreateTeapot(Device, &Meshes[0], &adjBuffer[0]);
	D3DXCreateSphere(Device, 1.0f, 20, 20, &Meshes[1], &adjBuffer[1]);
	D3DXCreateTorus(Device, 0.5f, 1.0f, 20, 20, &Meshes[2], &adjBuffer[2]);
	D3DXCreateCylinder(Device, 0.5f, 0.5f, 2.0f, 20, 20, &Meshes[3], &adjBuffer[3]);

	D3DXMatrixTranslation(&WorldMatrices[0],  0.0f,  2.0f, 0.0f);
	D3DXMatrixTranslation(&WorldMatrices[1],  0.0f, -2.0f, 0.0f);
	D3DXMatrixTranslation(&WorldMatrices[2], -3.0f,  0.0f, 0.0f);
	D3DXMatrixTranslation(&WorldMatrices[3],  3.0f,  0.0f, 0.0f);

	MeshColors[0] = D3DXVECTOR4(1.0f, 0.0f, 0.0f, 1.0f);
	MeshColors[1] = D3DXVECTOR4(0.0f, 1.0f, 0.0f, 1.0f);
	MeshColors[2] = D3DXVECTOR4(0.0f, 0.0f, 1.0f, 1.0f);
	MeshColors[3] = D3DXVECTOR4(1.0f, 1.0f, 0.0f, 1.0f);

	//
	// Allocate mesh outlines
	//

	MeshOutlines[0] = new SilhouetteEdges(Device, Meshes[0], adjBuffer[0]);
	MeshOutlines[1] = new SilhouetteEdges(Device, Meshes[1], adjBuffer[1]);
	MeshOutlines[2] = new SilhouetteEdges(Device, Meshes[2], adjBuffer[2]);
	MeshOutlines[3] = new SilhouetteEdges(Device, Meshes[3], adjBuffer[3]);

	d3d::Release<ID3DXBuffer*>(adjBuffer[0]);
	d3d::Release<ID3DXBuffer*>(adjBuffer[1]);
	d3d::Release<ID3DXBuffer*>(adjBuffer[2]);
	d3d::Release<ID3DXBuffer*>(adjBuffer[3]);

	//
	// Compile Toon Shader
	//

	ID3DXBuffer* toonCompiledCode = 0;
	ID3DXBuffer* toonErrorBuffer  = 0;

	hr = D3DXCompileShaderFromFile(
		"toon.txt",
		0,
		0,
		"Main", // entry point function name
		"vs_1_1",
		D3DXSHADER_DEBUG, 
		&toonCompiledCode,
		&toonErrorBuffer,
		&ToonConstTable);

	// output any error messages
	if( toonErrorBuffer )
	{
		::MessageBox(0, (char*)toonErrorBuffer->GetBufferPointer(), 0, 0);
		d3d::Release<ID3DXBuffer*>(toonErrorBuffer);
	}

	if(FAILED(hr))
	{
		::MessageBox(0, "D3DXCompileShaderFromFile() - FAILED", 0, 0);
		return false;
	}

	hr = Device->CreateVertexShader(
		(DWORD*)toonCompiledCode->GetBufferPointer(),
		&ToonShader);

	if(FAILED(hr))
	{
		::MessageBox(0, "CreateVertexShader - FAILED", 0, 0);
		return false;
	}

	d3d::Release<ID3DXBuffer*>(toonCompiledCode);

	//
	// Compile Outline shader.
	//

	ID3DXBuffer* outlineCompiledCode = 0;
	ID3DXBuffer* outlineErrorBuffer  = 0;

	hr = D3DXCompileShaderFromFile(
		"outline.txt",
		0,
		0,
		"Main", // entry point function name
		"vs_1_1",
		D3DXSHADER_DEBUG, 
		&outlineCompiledCode,
		&outlineErrorBuffer,
		&OutlineConstTable);

	// output any error messages
	if( outlineErrorBuffer )
	{
		::MessageBox(0, (char*)outlineErrorBuffer->GetBufferPointer(), 0, 0);
		d3d::Release<ID3DXBuffer*>(outlineErrorBuffer);
	}

	if(FAILED(hr))
	{
		::MessageBox(0, "D3DXCompileShaderFromFile() - FAILED", 0, 0);
		return false;
	}

	hr = Device->CreateVertexShader(
		(DWORD*)outlineCompiledCode->GetBufferPointer(),
		&OutlineShader);

	if(FAILED(hr))
	{
		::MessageBox(0, "CreateVertexShader - FAILED", 0, 0);
		return false;
	}

	d3d::Release<ID3DXBuffer*>(outlineCompiledCode);

	//
	// Load textures.
	//

	D3DXCreateTextureFromFile(Device, "toonshade.bmp", &ShadeTex);

	Device->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_POINT);
	Device->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_POINT);
	Device->SetSamplerState(0, D3DSAMP_MIPFILTER, D3DTEXF_NONE);

	// 
	// Get Handles
	//

	ToonWorldViewHandle     = ToonConstTable->GetConstantByName(0, "WorldViewMatrix");
	ToonWorldViewProjHandle = ToonConstTable->GetConstantByName(0, "WorldViewProjMatrix");
	ToonColorHandle         = ToonConstTable->GetConstantByName(0, "Color");
	ToonLightDirHandle      = ToonConstTable->GetConstantByName(0, "LightDirection");

	OutlineWorldViewHandle = OutlineConstTable->GetConstantByName(0, "WorldViewMatrix");
	OutlineProjHandle      = OutlineConstTable->GetConstantByName(0, "ProjMatrix");

	//
	// Set shader constants:
	//
	
	// Light direction:
	D3DXVECTOR4 directionToLight(-0.57f, 0.57f, -0.57f, 0.0f);

	ToonConstTable->SetVector(
		Device, 
		ToonLightDirHandle,
		&directionToLight);

	ToonConstTable->SetDefaults(Device);
	OutlineConstTable->SetDefaults(Device);

	//
	// Calculate projection matrix.
	//

	D3DXMatrixPerspectiveFovLH(
		&ProjMatrix, D3DX_PI * 0.25f, 
		(float)Width / (float)Height, 1.0f, 1000.0f);

	return true;
}

void Cleanup()
{
	for(int i = 0; i < 4; i++)
	{
		d3d::Release<ID3DXMesh*>(Meshes[i]);
		d3d::Delete<SilhouetteEdges*>(MeshOutlines[i]);
	}
	d3d::Release<IDirect3DTexture9*>(ShadeTex);
	d3d::Release<IDirect3DVertexShader9*>(ToonShader);
	d3d::Release<ID3DXConstantTable*>(ToonConstTable);
	d3d::Release<IDirect3DVertexShader9*>(OutlineShader);
	d3d::Release<ID3DXConstantTable*>(OutlineConstTable);
}

bool Display(float timeDelta)
{
	if( Device )
	{
		// 
		// Update the scene: Allow user to rotate around scene.
		//
		
		static float angle  = (3.0f * D3DX_PI) / 2.0f;
		static float height = 5.0f;
	
		if( ::GetAsyncKeyState(VK_LEFT) & 0x8000f )
			angle -= 0.5f * timeDelta;

		if( ::GetAsyncKeyState(VK_RIGHT) & 0x8000f )
			angle += 0.5f * timeDelta;

		if( ::GetAsyncKeyState(VK_UP) & 0x8000f )
			height += 5.0f * timeDelta;

		if( ::GetAsyncKeyState(VK_DOWN) & 0x8000f )
			height -= 5.0f * timeDelta;

		D3DXVECTOR3 position( cosf(angle) * 7.0f, height, sinf(angle) * 7.0f );
		D3DXVECTOR3 target(0.0f, 0.0f, 0.0f);
		D3DXVECTOR3 up(0.0f, 1.0f, 0.0f);
		D3DXMATRIX view;
		D3DXMatrixLookAtLH(&view, &position, &target, &up);

		//
		// Render
		//

		Device->Clear(0, 0, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, 0xffffffff, 1.0f, 0);
		Device->BeginScene();

		// Draw Cartoon
		Device->SetVertexShader(ToonShader);
		Device->SetTexture(0, ShadeTex);

		D3DXMATRIX worldView;
		D3DXMATRIX worldViewProj;
		for(int i = 0; i < 4; i++)
		{
			worldView = WorldMatrices[i] * view;
			worldViewProj = WorldMatrices[i] * view * ProjMatrix;

			ToonConstTable->SetMatrix(
				Device, 
				ToonWorldViewHandle,
				&worldView);

			ToonConstTable->SetMatrix(
				Device, 
				ToonWorldViewProjHandle,
				&worldViewProj);

			ToonConstTable->SetVector(
				Device,
				ToonColorHandle,
				&MeshColors[i]);

			Meshes[i]->DrawSubset(0);
		}

		// Draw Outlines.  
		Device->SetVertexShader(OutlineShader);
		Device->SetTexture(0, 0);

		Device->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);

		for(int i = 0; i < 4; i++)
		{
			worldView = WorldMatrices[i] * view;

			OutlineConstTable->SetMatrix(
				Device, 
				OutlineWorldViewHandle,
				&worldView);

			OutlineConstTable->SetMatrix(
				Device, 
				OutlineProjHandle,
				&ProjMatrix);

			MeshOutlines[i]->render();
		}

		Device->SetRenderState(D3DRS_CULLMODE, D3DCULL_CCW);

		Device->EndScene();
		Device->Present(0, 0, 0, 0);
	}
	return true;
}

//
// WndProc
//
LRESULT CALLBACK d3d::WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
	switch( msg )
	{
	case WM_DESTROY:
		::PostQuitMessage(0);
		break;
		
	case WM_KEYDOWN:
		if( wParam == VK_ESCAPE )
			::DestroyWindow(hwnd);

		break;
	}
	return ::DefWindowProc(hwnd, msg, wParam, lParam);
}

//
// WinMain
//
int WINAPI WinMain(HINSTANCE hinstance,
				   HINSTANCE prevInstance, 
				   PSTR cmdLine,
				   int showCmd)
{
	if(!d3d::InitD3D(hinstance,
		Width, Height, true, D3DDEVTYPE_HAL, &Device))
	{
		::MessageBox(0, "InitD3D() - FAILED", 0, 0);
		return 0;
	}
		
	if(!Setup())
	{
		::MessageBox(0, "Setup() - FAILED", 0, 0);
		return 0;
	}

	d3d::EnterMsgLoop( Display );

	Cleanup();

	Device->Release();

	return 0;
}


?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人激情黄色小说| 懂色av中文字幕一区二区三区| 日韩三级免费观看| www.亚洲在线| 精品午夜久久福利影院 | 欧美日韩一区不卡| 成熟亚洲日本毛茸茸凸凹| 丝袜亚洲另类欧美| 综合av第一页| 国产精品视频线看| 久久这里都是精品| 欧美一区二区三区婷婷月色| 色哟哟精品一区| 成人午夜在线视频| 国产一区二区视频在线| 日韩福利视频网| 亚洲国产裸拍裸体视频在线观看乱了| 国产精品理伦片| 国产日韩欧美精品一区| 日韩欧美中文字幕公布| 欧美日韩夫妻久久| 欧美自拍偷拍午夜视频| 99精品欧美一区二区三区小说 | 亚洲色图视频免费播放| 日本一二三四高清不卡| 久久人人爽爽爽人久久久| 日韩三级视频在线观看| 日韩一区二区免费视频| 欧美一级黄色片| 欧美日韩久久一区二区| 精品视频全国免费看| 欧美网站大全在线观看| 日本道色综合久久| 色网综合在线观看| 一本大道av伊人久久综合| 成人国产精品免费网站| 不卡区在线中文字幕| 福利91精品一区二区三区| 高清成人免费视频| 日韩欧美专区在线| 制服丝袜亚洲色图| 日韩视频一区二区三区在线播放| 6080国产精品一区二区| 日韩一区二区在线看| 日韩精品中午字幕| 2019国产精品| 国产无一区二区| 国产精品久久久爽爽爽麻豆色哟哟 | 久久99这里只有精品| 久久精品国产久精国产爱| 久久99精品久久久久久| 国产精品一区二区三区乱码| 成人午夜视频在线观看| 91老司机福利 在线| 欧美性猛片xxxx免费看久爱| 777久久久精品| 日韩欧美电影一区| 国产欧美一区二区精品性色超碰| 欧美国产日韩精品免费观看| 国产精品毛片久久久久久久| 亚洲激情在线激情| 日韩成人免费电影| 国产精品538一区二区在线| bt欧美亚洲午夜电影天堂| 欧美性猛交xxxx乱大交退制版| 欧美一区二区三区四区在线观看| 久久久不卡网国产精品二区| 亚洲精品欧美激情| 麻豆成人免费电影| 成人aa视频在线观看| 在线日韩国产精品| 亚洲精品在线免费观看视频| 国产精品久久看| 日本欧美一区二区三区| 顶级嫩模精品视频在线看| 欧美网站一区二区| 国产午夜亚洲精品午夜鲁丝片| 亚洲激情图片小说视频| 看片网站欧美日韩| 91影视在线播放| 欧美一级黄色大片| 亚洲欧美另类在线| 极品少妇一区二区三区精品视频 | 国产精品看片你懂得| 亚洲成人黄色影院| 国产精品一级二级三级| 欧美吻胸吃奶大尺度电影| 日本一区二区三区国色天香| 亚洲一区二区三区三| 风流少妇一区二区| 日韩一区二区精品在线观看| 亚洲视频一区二区在线观看| 青娱乐精品在线视频| 91麻豆高清视频| 久久亚洲综合av| 亚洲午夜国产一区99re久久| 国产凹凸在线观看一区二区| 欧美一区二区在线观看| 亚洲欧美另类在线| 国产大片一区二区| 欧美久久久久久久久中文字幕| 国产精品久线观看视频| 久久成人av少妇免费| 在线区一区二视频| 国产精品无码永久免费888| 免费在线观看一区| 在线观看一区二区精品视频| 韩国视频一区二区| 在线成人av网站| 一区二区三区精品在线| 成人一区在线看| 精品乱码亚洲一区二区不卡| 性做久久久久久免费观看| 93久久精品日日躁夜夜躁欧美| 国产亚洲一区二区三区在线观看 | 亚洲精品欧美专区| 成人av第一页| 久久精品视频在线免费观看| 日本美女一区二区三区| 欧美三级在线播放| 一区二区三区在线看| 97se亚洲国产综合自在线| 国产精品美女久久久久久久久| 国产精品一区免费在线观看| 欧美zozo另类异族| 久久aⅴ国产欧美74aaa| 日韩欧美国产麻豆| 久久99在线观看| www国产精品av| 国模大尺度一区二区三区| 欧美成人性福生活免费看| 麻豆成人在线观看| 欧美精品一区二区三区一线天视频| 日韩av一级电影| 日韩欧美国产精品一区| 精品制服美女丁香| 欧美精品一区二区高清在线观看| 免费av网站大全久久| 日韩一区二区视频在线观看| 另类小说综合欧美亚洲| 欧美精品一区二区在线播放| 精彩视频一区二区| 久久香蕉国产线看观看99| 韩国av一区二区| 国产精品视频麻豆| 91网站在线播放| 亚洲精品久久7777| 欧美日韩精品一区二区三区蜜桃| 丝袜a∨在线一区二区三区不卡| 91.com视频| 激情图片小说一区| 欧美高清在线视频| 欧洲av一区二区嗯嗯嗯啊| 日本欧美久久久久免费播放网| 精品国产亚洲在线| 成人av在线资源| 亚洲午夜电影网| 精品久久人人做人人爽| 成人福利视频网站| 亚洲成人一区二区| 精品久久人人做人人爽| av毛片久久久久**hd| 亚洲高清视频中文字幕| 欧美成人精品福利| 成人小视频在线| 亚洲成人三级小说| 久久久久久久久久看片| 日本韩国欧美三级| 老司机免费视频一区二区| 中文成人综合网| 欧美日韩国产精品自在自线| 国产综合久久久久久鬼色 | 亚洲天堂免费看| 欧美一区二区三区播放老司机| 国产一区久久久| 一个色综合av| 久久久久久久电影| 欧美亚洲国产一区在线观看网站| 极品美女销魂一区二区三区| 亚洲人快播电影网| 精品国产露脸精彩对白| 91麻豆.com| 国产一区二区三区| 亚洲五码中文字幕| 国产精品美女久久久久久久 | 欧美综合亚洲图片综合区| 国产精品资源在线看| 亚洲狠狠爱一区二区三区| 久久人人97超碰com| 欧美日韩一区三区| 懂色av一区二区三区免费看| 天涯成人国产亚洲精品一区av| 国产精品美女久久久久久久| 日韩欧美一区中文| 精品1区2区3区| 99精品视频一区| 国产成人免费视频网站 | 久久久午夜电影| 欧美精品色一区二区三区| av在线一区二区三区|