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

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

?? picksample.cpp

?? Introduction to directx9 3d game programming 一書的源代碼
?? CPP
字號:
//////////////////////////////////////////////////////////////////////////////////////////////////
// 
// File: pickSample.cpp
// 
// Author: Frank Luna (C) All Rights Reserved
//
// System: AMD Athlon 1800+ XP, 512 DDR, Geforce 3, Windows XP, MSVC++ 7.0 
//
// Desc: Demonstrates picking.
//          
//////////////////////////////////////////////////////////////////////////////////////////////////

#include "d3dUtility.h"

//
// Globals
//

IDirect3DDevice9* Device = 0; 

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

ID3DXMesh* Teapot = 0;
ID3DXMesh* Sphere = 0;

D3DXMATRIX World;
d3d::BoundingSphere BSphere;

//
// Functions
//
d3d::Ray CalcPickingRay(int x, int y)
{
	float px = 0.0f;
	float py = 0.0f;

	D3DVIEWPORT9 vp;
	Device->GetViewport(&vp);

	D3DXMATRIX proj;
	Device->GetTransform(D3DTS_PROJECTION, &proj);

	px = ((( 2.0f*x) / vp.Width)  - 1.0f) / proj(0, 0);
	py = (((-2.0f*y) / vp.Height) + 1.0f) / proj(1, 1);

	d3d::Ray ray;
	ray._origin    = D3DXVECTOR3(0.0f, 0.0f, 0.0f);
	ray._direction = D3DXVECTOR3(px, py, 1.0f);

	return ray;
}

void TransformRay(d3d::Ray* ray, D3DXMATRIX* T)
{
	// transform the ray's origin, w = 1.
	D3DXVec3TransformCoord(
		&ray->_origin,
		&ray->_origin,
		T);

	// transform the ray's direction, w = 0.
	D3DXVec3TransformNormal(
		&ray->_direction,
		&ray->_direction,
		T);

	// normalize the direction
	D3DXVec3Normalize(&ray->_direction, &ray->_direction);
}

bool RaySphereIntTest(d3d::Ray* ray, d3d::BoundingSphere* sphere)
{
	D3DXVECTOR3 v = ray->_origin - sphere->_center;

	float b = 2.0f * D3DXVec3Dot(&ray->_direction, &v);
	float c = D3DXVec3Dot(&v, &v) - (sphere->_radius * sphere->_radius);

	// find the discriminant
	float discriminant = (b * b) - (4.0f * c);

	// test for imaginary number
	if( discriminant < 0.0f )
		return false;

	discriminant = sqrtf(discriminant);

	float s0 = (-b + discriminant) / 2.0f;
	float s1 = (-b - discriminant) / 2.0f;

	// if a solution is >= 0, then we intersected the sphere
	if( s0 >= 0.0f || s1 >= 0.0f )
		return true;
	
	return false;
}

//
// Framework functions
//
bool Setup()
{
	//
	// Create the teapot.
	//

	D3DXCreateTeapot(Device, &Teapot, 0);

	//
	// Compute the bounding sphere.
	//

	BYTE* v = 0;
	Teapot->LockVertexBuffer(0, (void**)&v);

	D3DXComputeBoundingSphere(
		(D3DXVECTOR3*)v,
		Teapot->GetNumVertices(),
		D3DXGetFVFVertexSize(Teapot->GetFVF()),
		&BSphere._center,
		&BSphere._radius);

	Teapot->UnlockVertexBuffer();

	//
	// Build a sphere mesh that describes the teapot's bounding sphere.
	//

	D3DXCreateSphere(Device, BSphere._radius, 20, 20, &Sphere, 0);

	//
	// Set light.
	//

	D3DXVECTOR3 dir(0.707f, -0.0f, 0.707f);
	D3DXCOLOR col(1.0f, 1.0f, 1.0f, 1.0f);
	D3DLIGHT9 light = d3d::InitDirectionalLight(&dir, &col);

	Device->SetLight(0, &light);
	Device->LightEnable(0, true);
	Device->SetRenderState(D3DRS_NORMALIZENORMALS, true);
	Device->SetRenderState(D3DRS_SPECULARENABLE, false);	

	//
	// Set view matrix.
	//

	D3DXVECTOR3 pos(0.0f, 0.0f, -10.0f);
	D3DXVECTOR3 target(0.0f, 0.0f, 0.0f);
	D3DXVECTOR3 up(0.0f, 1.0f, 0.0f);

	D3DXMATRIX V;
	D3DXMatrixLookAtLH(&V, &pos, &target, &up);
	Device->SetTransform(D3DTS_VIEW, &V);

	//
	// Set projection matrix.
	//

	D3DXMATRIX proj;
	D3DXMatrixPerspectiveFovLH(
			&proj,
			D3DX_PI * 0.25f, // 45 - degree
			(float)Width / (float)Height,
			1.0f,
			1000.0f);
	Device->SetTransform(D3DTS_PROJECTION, &proj);

	return true;
}

void Cleanup()
{
	d3d::Release<ID3DXMesh*>(Teapot);
	d3d::Release<ID3DXMesh*>(Sphere);
}

bool Display(float timeDelta)
{
	if( Device )
	{
		//
		// Update: Update Teapot.
		//
			
		static float r     = 0.0f;
		static float v     = 1.0f;
		static float angle = 0.0f;

		D3DXMatrixTranslation(&World, cosf(angle) * r, sinf(angle) * r, 10.0f);

		// transfrom the bounding sphere to match the teapots position in the
		// world.
		BSphere._center = D3DXVECTOR3(cosf(angle)*r, sinf(angle)*r, 10.0f);

		r += v * timeDelta;

		if( r >= 8.0f )
			v = -v; // reverse direction

		if( r <= 0.0f )
			v = -v; // reverse direction

		angle += 1.0f * D3DX_PI * timeDelta;
		if( angle >= D3DX_PI * 2.0f )
			angle = 0.0f;

		//
		// Render
		//

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

		// Render the teapot.
		Device->SetTransform(D3DTS_WORLD, &World);
		Device->SetMaterial(&d3d::YELLOW_MTRL);
		Teapot->DrawSubset(0);

		// Render the bounding sphere with alpha blending so we can see 
		// through it.
		Device->SetRenderState(D3DRS_ALPHABLENDENABLE, true);
		Device->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
		Device->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);

		D3DMATERIAL9 blue = d3d::BLUE_MTRL;
		blue.Diffuse.a = 0.25f; // 25% opacity
		Device->SetMaterial(&blue);
		Sphere->DrawSubset(0);

		Device->SetRenderState(D3DRS_ALPHABLENDENABLE, false);

		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;
	case WM_LBUTTONDOWN:

		// compute the ray in view space given the clicked screen point
		d3d::Ray ray = CalcPickingRay(LOWORD(lParam), HIWORD(lParam));

		// transform the ray to world space
		D3DXMATRIX view;
		Device->GetTransform(D3DTS_VIEW, &view);

		D3DXMATRIX viewInverse;
		D3DXMatrixInverse(&viewInverse,	0, &view);

		TransformRay(&ray, &viewInverse);

		// test for a hit
		if( RaySphereIntTest(&ray, &BSphere) )
			::MessageBox(0, "Hit!", "HIT", 0);

		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一区二区三区免费野_久草精品视频
成人欧美一区二区三区| 久久国产精品72免费观看| 国产丝袜欧美中文另类| 欧美96一区二区免费视频| 免费高清视频精品| 国产91精品一区二区麻豆亚洲| 免费人成在线不卡| 国产真实乱偷精品视频免| 久久综合久久综合亚洲| 日韩欧美一区在线| 欧美精品自拍偷拍| 久草热8精品视频在线观看| 日韩国产成人精品| 中文字幕制服丝袜成人av| 亚洲欧美日韩精品久久久久| 亚洲bt欧美bt精品777| 免费成人美女在线观看| 国产亚洲综合性久久久影院| 另类中文字幕网| 国产成人av电影在线| 日本一区二区三区国色天香 | 日韩免费高清电影| 国产欧美日韩三区| 色视频一区二区| 亚洲色图欧美激情| 国产精品一区二区三区四区| 国产婷婷精品av在线| 99久免费精品视频在线观看 | 欧美少妇一区二区| 免费看精品久久片| 日韩欧美色综合网站| 国产乱码精品一品二品| 久久久蜜桃精品| 久久精品国内一区二区三区| 亚洲精品在线免费观看视频| 欧美日韩一卡二卡三卡 | 亚洲精品成人精品456| 精品免费一区二区三区| 久久精品久久综合| 久久五月婷婷丁香社区| 久久国内精品视频| 老色鬼精品视频在线观看播放| 国产精品美女久久久久av爽李琼| 成人高清视频在线| 日韩精品国产欧美| 国产精品色在线| 欧美一区二区三区日韩| 欧美一区三区四区| 欧美色图片你懂的| 一本一道久久a久久精品| 91久久精品国产91性色tv| 国产成人欧美日韩在线电影| 天天综合色天天| 国产精品短视频| 亚洲精品一区二区三区99| 日韩欧美国产一区二区三区| 一道本成人在线| 色丁香久综合在线久综合在线观看| 日本在线不卡一区| 一区二区三区日韩| 日产国产高清一区二区三区| 天天色 色综合| 久久精品二区亚洲w码| 国产麻豆精品theporn| 欧美日本精品一区二区三区| 欧美精三区欧美精三区| 91福利小视频| 91国产视频在线观看| 色久综合一二码| 欧美无砖专区一中文字| 国产精品国产a级| 午夜欧美大尺度福利影院在线看| 亚洲欧洲成人精品av97| 日韩国产欧美一区二区三区| 国产精品一区2区| 9191久久久久久久久久久| 国产精品久久久久精k8| 免费观看91视频大全| 性做久久久久久久免费看| 亚洲欧美国产毛片在线| 国产成人无遮挡在线视频| av电影在线不卡| 欧美一级欧美三级在线观看| 日韩理论在线观看| 日本欧美一区二区三区乱码| 日韩精品中文字幕在线一区| 久久女同精品一区二区| 日韩不卡一区二区三区| 色综合久久88色综合天天免费| 免费成人av资源网| 欧美精品色综合| 精品粉嫩aⅴ一区二区三区四区| 久久综合色播五月| 老司机精品视频导航| 7777精品伊人久久久大香线蕉最新版 | 一区二区三区视频在线看| 极品美女销魂一区二区三区| 色综合久久久久久久| 亚洲日本中文字幕区| 欧洲精品中文字幕| 国产精品国产精品国产专区不蜜| 国产在线不卡一区| 91丝袜高跟美女视频| 亚洲欧洲精品一区二区精品久久久| 天天综合网 天天综合色| 成人午夜激情影院| 欧美精品一区二区三区在线 | 激情综合色播五月| 91精品国产91久久综合桃花| 国产精品一区二区三区乱码| 亚洲美腿欧美偷拍| 成人一区二区三区在线观看 | 一区二区三区久久| 欧美综合一区二区三区| 国产精品影视天天线| 亚洲一区二区三区中文字幕在线| 日韩片之四级片| 粉嫩久久99精品久久久久久夜| 亚洲欧美综合色| 国产婷婷一区二区| 制服丝袜国产精品| 99国产精品久久久| 国产精品夜夜嗨| 一本到不卡精品视频在线观看| 国产乱码精品一区二区三| 欧美一区二区人人喊爽| 成人h动漫精品| 国产综合色视频| 午夜激情久久久| 一区二区三区日韩在线观看| 亚洲欧美日韩久久| 亚洲大片在线观看| 亚洲免费观看在线视频| 韩国在线一区二区| 五月激情综合网| 久久se精品一区二区| 午夜欧美电影在线观看| 亚洲综合在线电影| 亚洲人成伊人成综合网小说| 中文字幕一区二区三| 亚洲妇熟xx妇色黄| 国产iv一区二区三区| 奇米色一区二区三区四区| 免费观看30秒视频久久| 国产精品综合久久| 99精品欧美一区二区三区小说| 麻豆精品国产91久久久久久| 麻豆精品在线视频| 56国语精品自产拍在线观看| 日韩一级高清毛片| 一区二区三区免费看视频| 亚洲欧洲美洲综合色网| 美女视频一区二区三区| 不卡av在线网| 精品国产乱码久久久久久图片 | 首页亚洲欧美制服丝腿| 一卡二卡欧美日韩| 高清不卡在线观看av| 在线播放视频一区| 91福利在线导航| 成人中文字幕在线| 日韩一区二区三区在线视频| 日本vs亚洲vs韩国一区三区二区| 欧美videofree性高清杂交| 中文字幕在线不卡一区| 九九精品视频在线看| 欧美图区在线视频| 国产精品久久久久影院亚瑟| 国产成人av一区二区三区在线观看| 成人手机在线视频| 亚洲综合清纯丝袜自拍| 色哟哟一区二区| 精品国产91亚洲一区二区三区婷婷| 欧美精品 国产精品| 中文字幕一区二区三区在线观看 | 欧美日韩电影在线| 日韩 欧美一区二区三区| 黄页网站大全一区二区| 亚洲欧洲中文日韩久久av乱码| 国产欧美日韩视频一区二区| 国产日韩影视精品| 亚洲老妇xxxxxx| 伊人性伊人情综合网| 日韩专区中文字幕一区二区| 精品一区二区三区日韩| 成人午夜激情影院| 欧美人妇做爰xxxⅹ性高电影| 日韩免费在线观看| 精品国产精品网麻豆系列| 久久人人爽爽爽人久久久| 综合久久一区二区三区| 丝袜亚洲另类欧美| 国产成人三级在线观看| 欧美在线观看18| 久久久噜噜噜久久人人看| 亚洲色图另类专区| 久久精品免费观看| av一区二区三区黑人| 日韩午夜精品电影| 日韩一区日韩二区|