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

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

?? picksample.cpp

?? Direct 9.0 游戲編程 包括PDF書籍和源代碼
?? 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一区二区三区免费野_久草精品视频
精油按摩中文字幕久久| jlzzjlzz欧美大全| 国产成人在线免费观看| 91精彩视频在线观看| 精品国产区一区| 伊人夜夜躁av伊人久久| 国产在线播放一区二区三区| 精品久久久网站| 亚洲蜜桃精久久久久久久| 精品一区二区日韩| 欧美精品日日鲁夜夜添| 亚洲人成小说网站色在线| 国内精品久久久久影院色| 欧美日本一区二区在线观看| 中文字幕在线一区二区三区| 国产综合久久久久久久久久久久 | 久久九九久精品国产免费直播| 成人免费小视频| 国产精品亚洲一区二区三区在线 | 奇米888四色在线精品| 丁香网亚洲国际| 精品久久久久久亚洲综合网 | 亚洲国产一二三| 色综合久久88色综合天天免费| 日韩欧美国产一区二区三区| 亚洲va欧美va国产va天堂影院| 99久久精品国产观看| 精品剧情v国产在线观看在线| 日日摸夜夜添夜夜添国产精品| av激情成人网| 国产女人18毛片水真多成人如厕| 日韩电影在线免费看| 欧美曰成人黄网| 亚洲精品乱码久久久久久久久| 99国产一区二区三精品乱码| 1024成人网| 91免费版在线看| 亚洲精品欧美综合四区| 国内精品国产三级国产a久久| 日韩一区二区精品| 亚洲v日本v欧美v久久精品| 国产成人精品网址| 欧美一级爆毛片| 蜜臀久久99精品久久久画质超高清| av激情综合网| 国产欧美久久久精品影院| 精品制服美女丁香| 久久综合九色综合97婷婷女人 | 欧美日韩激情一区二区三区| 亚洲欧美激情小说另类| 在线观看av一区二区| 亚洲视频1区2区| 91首页免费视频| 亚洲一区二区免费视频| 91精品国产综合久久久久久 | 欧美成人福利视频| 视频一区二区三区中文字幕| 欧美色区777第一页| 亚洲国产精品久久不卡毛片| 在线成人免费视频| 亚洲一卡二卡三卡四卡五卡| 色老综合老女人久久久| 一区二区三区中文字幕电影 | 亚洲精品免费看| 成人一级片在线观看| 国产亚洲欧美日韩俺去了| 麻豆极品一区二区三区| 久久精品亚洲精品国产欧美kt∨| 丁香六月综合激情| 亚洲高清久久久| 久久免费午夜影院| 欧美一a一片一级一片| 国产在线一区观看| 一区二区三区四区中文字幕| 精品噜噜噜噜久久久久久久久试看| 国产91富婆露脸刺激对白| 夜夜揉揉日日人人青青一国产精品 | 国产精品免费aⅴ片在线观看| 国产精品影音先锋| 亚洲一区二区欧美| 久久午夜色播影院免费高清| 一本到三区不卡视频| 国内精品伊人久久久久av影院| 久久精品人人做人人爽人人| jlzzjlzz亚洲日本少妇| 亚洲色图欧美在线| 久久久久国产精品麻豆ai换脸 | 国产91精品露脸国语对白| 日韩av中文字幕一区二区三区| 国产精品乱码一区二区三区软件 | 麻豆精品在线播放| 一区二区三区在线看| 中文在线资源观看网站视频免费不卡| 欧美老年两性高潮| 色噜噜狠狠色综合欧洲selulu| 国产一区二区成人久久免费影院| 奇米影视7777精品一区二区| 一区二区三区欧美日韩| 国产欧美日本一区视频| 欧美三级在线视频| 麻豆国产精品777777在线| 最新日韩av在线| 国产欧美日韩视频一区二区| 欧美电影精品一区二区| 欧美色偷偷大香| 99综合电影在线视频| 成人一区二区三区中文字幕| 激情综合色丁香一区二区| 日本欧美肥老太交大片| 亚洲成人一区在线| 久久久蜜臀国产一区二区| 欧美成人性福生活免费看| 欧美一区二区三区的| 欧洲一区在线电影| 欧美午夜片在线看| 欧美狂野另类xxxxoooo| 欧美精品三级在线观看| 欧美日本视频在线| 欧美日韩二区三区| 欧美午夜一区二区三区| 欧美日韩国产三级| 欧美在线免费观看视频| 欧美网站一区二区| 欧美日韩亚洲不卡| 制服丝袜av成人在线看| 欧美区一区二区三区| 在线视频综合导航| 欧美日韩一区 二区 三区 久久精品| 欧美亚男人的天堂| 欧美午夜一区二区三区免费大片| 91理论电影在线观看| 在线观看一区二区视频| 欧美日韩卡一卡二| 欧美一级在线观看| 久久久久久久性| 中文字幕在线不卡一区| 一级中文字幕一区二区| 奇米色一区二区| 国产毛片精品视频| 99精品在线观看视频| 91久久人澡人人添人人爽欧美| 欧美私人免费视频| 欧美视频日韩视频在线观看| 欧美伊人久久久久久久久影院| 欧美一级xxx| 中文字幕av一区二区三区高| 国产精品九色蝌蚪自拍| 亚洲黄色录像片| 美腿丝袜亚洲色图| 成人国产精品视频| 欧美三级电影精品| 欧美v国产在线一区二区三区| 精品国产精品网麻豆系列| 中国色在线观看另类| 天堂精品中文字幕在线| 国产成人小视频| 欧美性生活大片视频| 亚洲精品一区二区三区精华液 | 日本高清不卡视频| 精品国产1区2区3区| 亚洲欧美国产77777| 看电影不卡的网站| 在线视频你懂得一区二区三区| 精品国产乱码久久久久久浪潮| 亚洲日本青草视频在线怡红院| 日韩电影在线一区二区| 91女厕偷拍女厕偷拍高清| 日韩欧美成人激情| 亚洲午夜久久久| 成人av综合在线| 亚洲精品一区二区三区四区高清 | 成人午夜免费视频| 777色狠狠一区二区三区| 久久九九久久九九| 日本不卡高清视频| 日本丶国产丶欧美色综合| 中文字幕欧美三区| 高清beeg欧美| 久久久久久久久久久久久女国产乱 | 日韩av电影免费观看高清完整版在线观看| 成人一区二区三区| 久久久精品黄色| 九色综合狠狠综合久久| 欧美日韩国产一级二级| 亚洲卡通欧美制服中文| www.成人网.com| 欧美高清在线一区| 国产不卡在线播放| 久久蜜桃香蕉精品一区二区三区| 日本va欧美va瓶| 欧美精品久久天天躁| 亚洲福利电影网| 精品视频1区2区3区| 亚洲中国最大av网站| 日本精品一区二区三区高清 | 天天色天天操综合| 欧洲激情一区二区| 亚洲精品自拍动漫在线| 欧洲视频一区二区| 婷婷丁香激情综合|