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

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

?? ps_multitex.cpp

?? Direct 9.0 游戲編程 包括PDF書籍和源代碼
?? 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一区二区三区免费野_久草精品视频
亚洲在线视频一区| 蜜臀av一区二区在线免费观看| 欧美午夜片在线观看| 国产一区二区三区美女| 亚洲午夜久久久久久久久电影网 | 欧美日韩一级黄| 国产精品午夜在线观看| 久久精品国产网站| 日韩精品资源二区在线| 久久99久久99| wwwwxxxxx欧美| 国产99久久久精品| 国产免费成人在线视频| 国产成人啪午夜精品网站男同| 午夜日韩在线电影| 99久久久免费精品国产一区二区| 青青草伊人久久| 一区二区三区日本| 国产精品你懂的在线| 欧美成人高清电影在线| 欧美精品在线视频| 在线观看亚洲成人| 91丨九色丨蝌蚪丨老版| 成人性视频网站| 国产在线不卡一卡二卡三卡四卡| 午夜av电影一区| 亚洲香肠在线观看| 一区二区三区四区蜜桃| 亚洲欧美在线高清| 国产精品女同互慰在线看| 日本一区二区三区在线观看| 亚洲精品一区二区三区在线观看 | 麻豆精品一区二区av白丝在线| 欧美美女激情18p| 极品少妇一区二区三区精品视频 | 欧美大尺度电影在线| 在线成人高清不卡| 欧美日韩国产高清一区二区| 91论坛在线播放| 亚洲精品五月天| 亚洲色图一区二区三区| 亚洲精选免费视频| 丝袜亚洲另类欧美| 亚洲成人激情社区| 久久综合久久综合久久综合| 国产一区二区中文字幕| 欧美色图在线观看| 成人欧美一区二区三区| 亚洲精品一区二区三区在线观看 | 亚洲视频一区在线观看| 欧美自拍偷拍一区| 色综合中文字幕| 色av一区二区| 色综合天天狠狠| 99re这里只有精品视频首页| 丁香网亚洲国际| 亚洲成人免费看| 亚洲欧洲三级电影| 国产清纯在线一区二区www| 日韩一级片在线播放| 97国产一区二区| 91色|porny| 国产成人一区二区精品非洲| 激情五月激情综合网| 亚洲日本一区二区三区| 日韩欧美国产麻豆| 欧美日韩免费观看一区三区| 国产在线视频不卡二| 亚洲国产aⅴ天堂久久| 国产精品福利在线播放| 欧美一三区三区四区免费在线看 | 中文字幕第一区综合| 日韩欧美亚洲国产另类| 一本久久精品一区二区| 99综合电影在线视频| 欧美日韩精品一区二区三区四区| 久久久另类综合| 亚洲品质自拍视频| 99精品欧美一区二区三区小说 | 精品在线一区二区三区| 午夜免费久久看| 亚洲高清视频中文字幕| 日本亚洲天堂网| 国产一区日韩二区欧美三区| 国产成人激情av| 99国产精品久久久| 欧美人牲a欧美精品| 精品少妇一区二区三区在线播放| 久久久精品蜜桃| 亚洲色图都市小说| 午夜影院久久久| www.一区二区| 欧美性三三影院| 欧美一区二视频| 欧美激情一区二区在线| 国产精品私人影院| 中文字幕一区二区三区在线观看| 亚洲线精品一区二区三区八戒| 美女一区二区三区| 成人一级黄色片| 欧美视频在线播放| 精品女同一区二区| 国产精品久久久久永久免费观看| 亚洲成人www| 狠狠色丁香婷婷综合| av色综合久久天堂av综合| 欧美日韩免费一区二区三区| 久久视频一区二区| 国产亚洲1区2区3区| 亚洲视频在线一区| 国内偷窥港台综合视频在线播放| 99综合电影在线视频| 2021久久国产精品不只是精品| 中文字幕亚洲视频| 婷婷亚洲久悠悠色悠在线播放| 国产99久久精品| 91麻豆精品国产91久久久久久 | 麻豆国产欧美日韩综合精品二区| 精品一区二区在线视频| 色婷婷国产精品久久包臀| 精品国偷自产国产一区| 亚洲人成亚洲人成在线观看图片| 青青草原综合久久大伊人精品优势| 91亚洲国产成人精品一区二区三 | 亚洲国产精品二十页| 石原莉奈一区二区三区在线观看| 懂色av一区二区三区蜜臀| 91免费国产在线| 国产精品青草综合久久久久99| 日日夜夜一区二区| 不卡的av电影在线观看| 日韩精品一区二区三区视频在线观看 | 日本在线不卡一区| 色综合久久综合| 精品欧美久久久| www.亚洲色图.com| 精品一区二区在线观看| 一区二区三区久久| 欧美一二三区精品| 日本美女一区二区三区视频| 欧美视频自拍偷拍| 成人欧美一区二区三区小说 | 天天综合日日夜夜精品| 日韩精品一区二区三区视频播放 | 亚洲欧洲制服丝袜| 久久国产精品第一页| 一区二区三区不卡视频在线观看 | 亚洲色图色小说| 亚洲欧美偷拍三级| 国产精品一区免费在线观看| 91精品国产入口| 高清不卡一二三区| 午夜精品久久久久久久99水蜜桃 | 国产婷婷色一区二区三区在线| 91麻豆精品91久久久久同性| 欧美性受xxxx黑人xyx性爽| 94-欧美-setu| 91免费视频大全| 色婷婷精品大在线视频| 国产一区二区不卡老阿姨| 日本少妇一区二区| 久久精品久久综合| 麻豆国产精品视频| 国产很黄免费观看久久| 国产精品69毛片高清亚洲| 国产麻豆精品久久一二三| 日本欧美大码aⅴ在线播放| 久久精品国产99国产| 国产最新精品精品你懂的| 国产99久久久国产精品潘金| 色综合天天综合狠狠| 337p亚洲精品色噜噜| 精品久久五月天| 最新中文字幕一区二区三区| 一区二区三区免费| 狠狠网亚洲精品| 色综合久久综合网欧美综合网| 国产在线播精品第三| k8久久久一区二区三区| 欧美日韩免费观看一区二区三区| 欧美mv日韩mv国产网站| 亚洲图片欧美综合| 久久国产免费看| 一本大道久久a久久综合婷婷| 91精品国产乱码久久蜜臀| 亚洲欧美综合另类在线卡通| 天使萌一区二区三区免费观看| 国产福利不卡视频| 69久久夜色精品国产69蝌蚪网| 中文乱码免费一区二区| 久久伊99综合婷婷久久伊| 国产精品国产自产拍高清av| 亚洲成av人片| 不卡电影免费在线播放一区| 欧美不卡视频一区| 日韩av一区二区三区四区| 91一区二区在线观看| 欧美极品xxx| 高清国产一区二区| 国产精品久久久久婷婷二区次|