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

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

?? ps_multitex.cpp

?? Introduction to directx9 3d game programming 一書的源代碼
?? CPP
字號:
//////////////////////////////////////////////////////////////////////////////////////////////////
// 
// File: ps_multitex.cpp
// 
// Author: Frank Luna (C) All Rights Reserved
//
// System: AMD Athlon 1800+ XP, 512 DDR, Geforce 3, Windows XP, MSVC++ 7.0 
//
// Desc: Deomstrates multi-texturing using a pixel shader.  You will have
//       to switch to the REF device to run this sample if your hardware
//       doesn't support pixel shaders.
//          
//////////////////////////////////////////////////////////////////////////////////////////////////

#include "d3dUtility.h"

//
// Globals
//

IDirect3DDevice9* Device = 0; 

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

IDirect3DPixelShader9* MultiTexPS = 0;
ID3DXConstantTable* MultiTexCT    = 0;

IDirect3DVertexBuffer9* QuadVB = 0;

IDirect3DTexture9* BaseTex      = 0;
IDirect3DTexture9* SpotLightTex = 0;
IDirect3DTexture9* StringTex    = 0;

D3DXHANDLE BaseTexHandle      = 0;
D3DXHANDLE SpotLightTexHandle = 0;
D3DXHANDLE StringTexHandle    = 0;

D3DXCONSTANT_DESC BaseTexDesc;
D3DXCONSTANT_DESC SpotLightTexDesc;
D3DXCONSTANT_DESC StringTexDesc;

// 
// Structs
//

struct MultiTexVertex
{
	MultiTexVertex(float x, float y, float z,
		float u0, float v0,
		float u1, float v1,
		float u2, float v2)
	{
		 _x =  x;  _y =  y; _z = z;
		_u0 = u0; _v0 = v0; 
		_u1 = u1; _v1 = v1;
		_u2 = u2, _v2 = v2;
	}

	float _x, _y, _z;
	float _u0, _v0;
	float _u1, _v1;
	float _u2, _v2;

	static const DWORD FVF;
};
const DWORD MultiTexVertex::FVF = D3DFVF_XYZ | D3DFVF_TEX3; 

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

	//
	// Create geometry.
	//

	Device->CreateVertexBuffer(
		6 * sizeof(MultiTexVertex), 
		D3DUSAGE_WRITEONLY,
		MultiTexVertex::FVF,
		D3DPOOL_MANAGED,
		&QuadVB,
		0);

	MultiTexVertex* v = 0;
	QuadVB->Lock(0, 0, (void**)&v, 0);

	v[0] = MultiTexVertex(-10.0f, -10.0f, 5.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f);
	v[1] = MultiTexVertex(-10.0f,  10.0f, 5.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
	v[2] = MultiTexVertex( 10.0f,  10.0f, 5.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f);

	v[3] = MultiTexVertex(-10.0f, -10.0f, 5.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f);
	v[4] = MultiTexVertex( 10.0f,  10.0f, 5.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f);
	v[5] = MultiTexVertex( 10.0f, -10.0f, 5.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f);

	QuadVB->Unlock();

	//
	// Compile shader
	//

	ID3DXBuffer* shader      = 0;
	ID3DXBuffer* errorBuffer = 0;

	hr = D3DXCompileShaderFromFile(
		"ps_multitex.txt",
		0,
		0,
		"Main", // entry point function name
		"ps_1_1",
		D3DXSHADER_DEBUG, 
		&shader,
		&errorBuffer,
		&MultiTexCT);

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

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

	//
	// Create Pixel Shader
	//
	hr = Device->CreatePixelShader(
		(DWORD*)shader->GetBufferPointer(),
		&MultiTexPS);

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

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

	//
	// Load textures.
	//

	D3DXCreateTextureFromFile(Device, "crate.bmp", &BaseTex);
	D3DXCreateTextureFromFile(Device, "spotlight.bmp", &SpotLightTex);
	D3DXCreateTextureFromFile(Device, "text.bmp", &StringTex);

	//
	// Set Projection Matrix
	//

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

	Device->SetTransform(D3DTS_PROJECTION, &P);

	//
	// Disable lighting.
	//

	Device->SetRenderState(D3DRS_LIGHTING, false);

	// 
	// Get Handles
	//

	BaseTexHandle      = MultiTexCT->GetConstantByName(0, "BaseTex");
	SpotLightTexHandle = MultiTexCT->GetConstantByName(0, "SpotLightTex");
	StringTexHandle    = MultiTexCT->GetConstantByName(0, "StringTex");

	//
	// Set constant descriptions:
	//

	UINT count;
	
	MultiTexCT->GetConstantDesc(BaseTexHandle,      &BaseTexDesc, &count);
	MultiTexCT->GetConstantDesc(SpotLightTexHandle, &SpotLightTexDesc, &count);
	MultiTexCT->GetConstantDesc(StringTexHandle,    &StringTexDesc, &count);

	MultiTexCT->SetDefaults(Device);

	return true;
}

void Cleanup()
{
	d3d::Release<IDirect3DVertexBuffer9*>(QuadVB);

	d3d::Release<IDirect3DTexture9*>(BaseTex);
	d3d::Release<IDirect3DTexture9*>(SpotLightTex);
	d3d::Release<IDirect3DTexture9*>(StringTex);

	d3d::Release<IDirect3DPixelShader9*>(MultiTexPS);
	d3d::Release<ID3DXConstantTable*>(MultiTexCT);
}

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 radius = 20.0f;
		
		if( ::GetAsyncKeyState(VK_LEFT) & 0x8000f )
			angle -= 0.5f * timeDelta;

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

		if( ::GetAsyncKeyState(VK_UP) & 0x8000f )
			radius -= 2.0f * timeDelta;

		if( ::GetAsyncKeyState(VK_DOWN) & 0x8000f )
			radius += 2.0f * timeDelta;

		D3DXVECTOR3 position( cosf(angle) * radius, 0.0f, sinf(angle) * radius );
		D3DXVECTOR3 target(0.0f, 0.0f, 0.0f);
		D3DXVECTOR3 up(0.0f, 1.0f, 0.0f);
		D3DXMATRIX V;
		D3DXMatrixLookAtLH(&V, &position, &target, &up);

		Device->SetTransform(D3DTS_VIEW, &V);
		
		//
		// Render
		//

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

		Device->SetPixelShader(MultiTexPS);
		Device->SetFVF(MultiTexVertex::FVF);
		Device->SetStreamSource(0, QuadVB, 0, sizeof(MultiTexVertex));

		// base tex
		Device->SetTexture(     BaseTexDesc.RegisterIndex, BaseTex);
		Device->SetSamplerState(BaseTexDesc.RegisterIndex, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);
		Device->SetSamplerState(BaseTexDesc.RegisterIndex, D3DSAMP_MINFILTER, D3DTEXF_LINEAR);
		Device->SetSamplerState(BaseTexDesc.RegisterIndex, D3DSAMP_MIPFILTER, D3DTEXF_LINEAR);

		// spotlight tex
		Device->SetTexture(     SpotLightTexDesc.RegisterIndex, SpotLightTex);
		Device->SetSamplerState(SpotLightTexDesc.RegisterIndex, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);
		Device->SetSamplerState(SpotLightTexDesc.RegisterIndex, D3DSAMP_MINFILTER, D3DTEXF_LINEAR);
		Device->SetSamplerState(SpotLightTexDesc.RegisterIndex, D3DSAMP_MIPFILTER, D3DTEXF_LINEAR);

		// string tex
		Device->SetTexture(     StringTexDesc.RegisterIndex, StringTex);
		Device->SetSamplerState(StringTexDesc.RegisterIndex, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);
		Device->SetSamplerState(StringTexDesc.RegisterIndex, D3DSAMP_MINFILTER, D3DTEXF_LINEAR);
		Device->SetSamplerState(StringTexDesc.RegisterIndex, D3DSAMP_MIPFILTER, D3DTEXF_LINEAR);

		Device->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 2);
		
		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;
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91福利视频久久久久| 91在线云播放| 亚洲国产视频a| 亚洲人成电影网站色mp4| 国产女人aaa级久久久级 | av电影一区二区| 国产成人精品免费看| 国产成人亚洲精品狼色在线| 国内欧美视频一区二区| 国产自产2019最新不卡| 国产福利电影一区二区三区| 成人avav在线| 在线观看免费亚洲| 91精品国产免费| 久久免费美女视频| 国产精品欧美极品| 一区二区三区蜜桃| 亚洲1区2区3区4区| 久久精品国产亚洲5555| 精品亚洲免费视频| 成人午夜碰碰视频| 在线视频欧美精品| 欧美一区日本一区韩国一区| 26uuu国产在线精品一区二区| 久久久久国产精品麻豆ai换脸| 欧美国产精品劲爆| 亚洲成人精品一区二区| 国产一区二三区好的| eeuss国产一区二区三区| 欧美亚洲尤物久久| 亚洲精品一线二线三线| 亚洲人成网站影音先锋播放| 日本怡春院一区二区| 高清国产午夜精品久久久久久| 色婷婷综合五月| 精品国产乱码久久久久久久久| 国产精品色婷婷| 午夜视频在线观看一区| 国产精品一二三四| 91精品国产综合久久久久久 | 国产精品免费视频观看| 亚洲香蕉伊在人在线观| 国产一区二区视频在线| 欧美亚洲一区三区| 国产天堂亚洲国产碰碰| 视频精品一区二区| 床上的激情91.| 91精品在线免费观看| 亚洲欧洲成人精品av97| 蜜桃久久精品一区二区| 在线观看亚洲精品| 欧美激情中文不卡| 麻豆91小视频| 在线视频国内自拍亚洲视频| 日本一二三不卡| 国模无码大尺度一区二区三区| 欧美午夜不卡在线观看免费| 国产片一区二区| 国产一区二区剧情av在线| 欧美日韩高清在线播放| 亚洲一区二区三区四区在线| 本田岬高潮一区二区三区| 日韩美女视频19| 激情综合五月天| 日韩欧美精品在线| 日韩精品一级中文字幕精品视频免费观看 | 亚洲一区在线观看网站| 成人综合婷婷国产精品久久免费| 欧美人动与zoxxxx乱| 亚洲一区二区av在线| 一本久久精品一区二区| 国产精品第五页| av高清不卡在线| 国产精品沙发午睡系列990531| 激情文学综合网| 久久久久亚洲蜜桃| 国产精品456露脸| 国产日韩影视精品| 国产成人av电影在线观看| 欧美www视频| 国产一区二三区| 国产日韩综合av| www.亚洲在线| 依依成人精品视频| 欧美伊人久久久久久久久影院 | 欧美日韩亚洲高清一区二区| 一区二区三区毛片| 欧洲一区二区av| 丝袜亚洲精品中文字幕一区| 91精品国产综合久久久久久久久久| 日韩激情一区二区| 精品三级在线观看| 国产·精品毛片| 亚洲免费av在线| 51精品视频一区二区三区| 久久超碰97人人做人人爱| 亚洲国产精品欧美一二99| 在线播放/欧美激情| 国内欧美视频一区二区| 中文字幕在线免费不卡| 欧美图区在线视频| 久久国产精品色婷婷| 亚洲欧洲99久久| 91精品国产品国语在线不卡| 国产精品一区二区不卡| 亚洲一本大道在线| 久久免费视频色| 欧美在线视频你懂得| 国内精品国产成人| 亚洲欧美日韩国产手机在线 | 国产成人午夜精品影院观看视频| 欧美国产综合一区二区| 欧美最猛黑人xxxxx猛交| 美女一区二区在线观看| 国产精品久久久久影院| 7777精品伊人久久久大香线蕉超级流畅| 久久精品国产第一区二区三区| 中文在线一区二区| 9191成人精品久久| 99久久免费精品| 国产自产视频一区二区三区| 亚洲一二三四区不卡| 亚洲国产wwwccc36天堂| 国产调教视频一区| 欧美精品 日韩| av在线播放成人| 精品在线免费观看| 亚洲国产精品久久久男人的天堂| 国产欧美日韩综合精品一区二区| 欧美另类久久久品| 91视频.com| 成人自拍视频在线| 激情小说亚洲一区| 日本午夜一区二区| 亚洲成人午夜电影| 亚洲一区中文日韩| 亚洲欧美乱综合| 国产精品女上位| 久久九九全国免费| 欧美mv和日韩mv的网站| 欧美精选一区二区| 欧美日韩国产成人在线免费| 日本高清不卡视频| 91在线精品秘密一区二区| 国产精品一区二区你懂的| 精品在线观看视频| 国产永久精品大片wwwapp| 精品亚洲欧美一区| 国产一区二区主播在线| 极品美女销魂一区二区三区免费| 日韩精品免费专区| 日韩电影在线观看一区| 一区二区三区欧美| 亚洲国产精品视频| 午夜日韩在线观看| 日本最新不卡在线| 免费成人你懂的| 精品制服美女丁香| 国产不卡高清在线观看视频| 国产精品综合av一区二区国产馆| 麻豆精品蜜桃视频网站| 免费在线看成人av| 国产九九视频一区二区三区| 成人午夜视频免费看| 91啦中文在线观看| 欧美性一二三区| 8x福利精品第一导航| 日韩欧美激情在线| 中文字幕乱码久久午夜不卡| 中文字幕一区二区三区乱码在线| 中文字幕在线不卡一区| 一区二区三区高清| 日本美女一区二区三区| 国产一区不卡精品| 97精品久久久久中文字幕| 在线视频欧美区| 精品国产免费视频| 中文字幕亚洲欧美在线不卡| 亚洲激情在线播放| 99久久精品免费观看| 欧美日韩亚洲国产综合| 欧美精品一区视频| 亚洲激情五月婷婷| 免费观看91视频大全| 丁香六月综合激情| 欧美日韩一区二区三区四区 | 91猫先生在线| 日韩精品在线一区| 中文字幕人成不卡一区| 图片区小说区区亚洲影院| 国产精品888| 欧美精品久久一区| 国产精品视频yy9299一区| 视频一区二区三区在线| 成人高清视频免费观看| 欧美伦理电影网| 亚洲天堂久久久久久久| 韩国精品久久久| 欧美日韩一区二区在线观看| 国产精品情趣视频|