VC++2010游戏开发随记之四十二 - 图文(8)

2020-02-21 11:24

275. 276. 277. 278. 279. 280. 281. 282. 283. 284. 285. 286. 287. 288. 289. 290. 291. 292. 293. 294.

g_pKeyboardDevice->SetCooperativeLevel(hwnd, DISCL_FOREGR

//获取设备控制权

g_pKeyboardDevice->Acquire();

if(!(S_OK==Objects_Init())) return E_FAIL;

SAFE_RELEASE(pD3D) //LPDIRECT3D9接口对象的使命完成,我们将其释

return S_OK; }

HRESULT Objects_Init() {

//创建字体

D3DXCreateFont(g_pd3dDevice, 36, 0, 0, 1000, false, DEFAU OUT_DEFAULT_PRECIS, DEFAULT_QUALITY, 0, _T(\) D3DXCreateFont(g_pd3dDevice, 20, 0, 1000, 0, false, DEFAU

OUND | DISCL_NONEXCLUSIVE);

放掉

LT_CHARSET, , &g_pTextFPS); LT_CHARSET, 295. 296.

OUT_DEFAULT_PRECIS, DEFAULT_QUALITY, 0, L\华文中宋 D3DXCreateFont(g_pd3dDevice, 23, 0, 1000, 0, false, DEFAU\, &g_pTextAdaperName); LT_CHARSET, 297. 298.

OUT_DEFAULT_PRECIS, DEFAULT_QUALITY, 0, L\微软雅黑 D3DXCreateFont(g_pd3dDevice, 26, 0, 1000, 0, false, DEFAU\, &g_pTextHelper); LT_CHARSET, 299. 300. 301. 302. 303. 304. 305. 306.

OUT_DEFAULT_PRECIS, DEFAULT_QUALITY, 0, L\

// 从X文件中加载网格数据

LPD3DXBUFFER pAdjBuffer = NULL; LPD3DXBUFFER pMtrlBuffer = NULL;

D3DXLoadMeshFromX(L\, D3DXMESH_MANAGED, g_pd3dDevi &pAdjBuffer, &pMtrlBuffer, NULL, &g_dwNumMtrls, &g_pM

\, &g_pTextInfor);

ce, esh);

307. 308. 309. 310. 311. 312. 313. 314. 315. 316. 317. 318. 319. 320. 321. 322. 323. 324. 325. 326. 327. 328. 329. 330. 331. 332. 333. 334. 335. 336. 337. 338. 339. 340. 341. 342. 343.

// 读取材质和纹理数据

D3DXMATERIAL *pMtrls = (D3DXMATERIAL*)pMtrlBuffer->GetBuf g_pMaterials = new D3DMATERIAL9[g_dwNumMtrls]; g_pTextures = new LPDIRECT3DTEXTURE9[g_dwNumMtrls];

for (DWORD i=0; i

g_pMaterials[i] = pMtrls[i].MatD3D;

g_pMaterials[i].Ambient = g_pMaterials[i].Diffuse; g_pTextures[i] = NULL;

D3DXCreateTextureFromFileA(g_pd3dDevice, pMtrls[i].pT }

pAdjBuffer->Release(); pMtrlBuffer->Release();

// 设置渲染状态

g_pd3dDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_ g_pd3dDevice->SetRenderState(D3DRS_AMBIENT, D3DXCOLOR

g_pd3dDevice->SetSamplerState(0, D3DSAMP_MAGFILTER, D g_pd3dDevice->SetSamplerState(0, D3DSAMP_MINFILTER, D

return S_OK; }

//***********************************************************// Name:Matrix_Set() // Desc: 设置世界矩阵

// Point:【Direct3D四大变换】

// 1.【四大变换之一】:世界变换矩阵的设置 // 2.【四大变换之二】:取景变换矩阵的设置 // 3.【四大变换之三】:投影变换矩阵的设置 // 4.【四大变换之四】:视口变换的设置

//***********************************************************

ferPointer();

extureFilename, &g_pTextures[i]);

CCW); //开启背面消隐

(1.0f, 1.0f, 1.0f, 1.0f)); //设置环境光

3DTEXF_LINEAR);//设置为线性纹理过滤 3DTEXF_LINEAR);

******************************

****************************** 344. 345. 346.

void Matrix_Set() {

//-------------------------------------------------------

------------------------------- 347. 348. 349. 350. 351.

//【四大变换之一】:世界变换矩阵的设置

//-------------------------------------------------------

//-------------------------------------------------------

-------------------------------

------------------------------- 352. 353.

//【四大变换之二】:取景变换矩阵的设置

//-------------------------------------------------------

------------------------------- 354. 355. 356. 357. 358. 359. 360. 361.

D3DXMATRIX matView; //定义一个矩阵

D3DXVECTOR3 vEye(0.0f, 0.0f, -250.0f); //摄像机的位置 D3DXVECTOR3 vAt(0.0f, 0.0f, 0.0f); //观察点的位置 D3DXVECTOR3 vUp(0.0f, 1.0f, 0.0f);//向上的向量

D3DXMatrixLookAtLH(&matView, &vEye, &vAt, &vUp); //计算出 g_pd3dDevice->SetTransform(D3DTS_VIEW, &matView); //应用取

//-------------------------------------------------------

取景变换矩阵 景变换矩阵

------------------------------- 362. 363.

//【四大变换之三】:投影变换矩阵的设置

//-------------------------------------------------------

------------------------------- 364. 365.

D3DXMATRIX matProj; //定义一个矩阵

D3DXMatrixPerspectiveFovLH(&matProj, D3DX_PI / 4.0f,(floa

t)((double)SCREEN_WIDTH/SCREEN_HEIGHT),1.0f, 1000.0f); //计算投影变换矩阵 366. 367. 368.

g_pd3dDevice->SetTransform(D3DTS_PROJECTION, &matProj);

//-------------------------------------------------------//设置投影变换矩阵

------------------------------- 369. 370.

//【四大变换之四】:视口变换的设置

//-------------------------------------------------------

------------------------------- 371. 372.

D3DVIEWPORT9 vp; //实例化一个D3DVIEWPORT9结构体,然后做填空题 vp.X = 0; //表示视口相对于窗口的X坐标

给各个参数赋值就可以了

373. 374. 375. 376. 377. 378. 379. 380. 381. 382. 383. 384. 385. 386. 387.

vp.Y = 0; //视口相对对窗口的Y坐标 vp.Width = SCREEN_WIDTH; //视口的宽度 vp.Height = SCREEN_HEIGHT; //视口的高度 vp.MinZ = 0.0f; //视口在深度缓存中的最小深度值 vp.MaxZ = 1.0f; //视口在深度缓存中的最大深度值 g_pd3dDevice->SetViewport(&vp); //视口的设置 }

void Direct3D_Update( HWND hwnd) {

// 获取键盘消息并给予设置相应的填充模式

if (g_pKeyStateBuffer[DIK_1] & 0x80) // 若数字 g_pd3dDevice->SetRenderState(D3DRS_FILLMODE,D3DFILL_S

键1被按下,进行实体填充 OLID); 388. 389. 390. 391. 392. 393. 394. 395. 396. 397. 398. 399. 400. 401. 402. 403. 404. 405. 406. 407. 408. 409.

if (g_pKeyStateBuffer[DIK_2] & 0x80) // 若数字 g_pd3dDevice->SetRenderState(D3DRS_FILLMODE,D3DFILL_W

// 读取鼠标输入

::ZeroMemory(&g_diMouseState, sizeof(g_diMouseState)); Device_Read(g_pMouseDevice, (LPVOID)&g_diMouseState, size

// 读取键盘输入

::ZeroMemory(g_pKeyStateBuffer, sizeof(g_pKeyStateBuffer) Device_Read(g_pKeyboardDevice, (LPVOID)g_pKeyStateBuffer,

// 按住鼠标左键并拖动,为平移操作

static FLOAT fPosX = 0.0f, fPosY = 30.0f, fPosZ = 0.0f; if (g_diMouseState.rgbButtons[0] & 0x80) {

fPosX += g_diMouseState.lX * 0.08f; fPosY += g_diMouseState.lY * -0.08f; }

//鼠标滚轮,为观察点收缩操作

fPosZ += g_diMouseState.lZ * 0.02f;

键2被按下,进行线框填充 IREFRAME);

of(g_diMouseState));

);

sizeof(g_pKeyStateBuffer));

410. 411. 412. 413. 414. 415. 416. 417. 418.

419. 420. 421. 422.

423. 424. 425. 426. 427. 428. 429. 430. 431. 432. 433. 434. 435. 436. 437. 438. 439. 440. 441. 442. 443. 444. 445. 446.

// 平移物体

if (g_pKeyStateBuffer[DIK_A] & 0x80) fPosX -= 0.005f; if (g_pKeyStateBuffer[DIK_D] & 0x80) fPosX += 0.005f; if (g_pKeyStateBuffer[DIK_W] & 0x80) fPosY += 0.005f; if (g_pKeyStateBuffer[DIK_S] & 0x80) fPosY -= 0.005f;

D3DXMatrixTranslation(&g_matWorld, fPosX, fPosY, fPosZ);

// 按住鼠标右键并拖动,为旋转操作

static float fAngleX = 0.15f, fAngleY = -(float)D3DX_PI ; if (g_diMouseState.rgbButtons[1] & 0x80) {

fAngleX += g_diMouseState.lY * -0.01f; fAngleY += g_diMouseState.lX * -0.01f; }

// 旋转物体

if (g_pKeyStateBuffer[DIK_UP] & 0x80) fAngleX += 0.005 if (g_pKeyStateBuffer[DIK_DOWN] & 0x80) fAngleX -= 0.005 if (g_pKeyStateBuffer[DIK_LEFT] & 0x80) fAngleY -= 0.005 if (g_pKeyStateBuffer[DIK_RIGHT] & 0x80) fAngleY += 0.005

D3DXMATRIX Rx, Ry;

D3DXMatrixRotationX(&Rx, fAngleX); D3DXMatrixRotationY(&Ry, fAngleY);

g_matWorld = Rx * Ry * g_matWorld;

g_pd3dDevice->SetTransform(D3DTS_WORLD, &g_matWorld); Matrix_Set(); }

//***********************************************************

f; f; f; f;

******************************


VC++2010游戏开发随记之四十二 - 图文(8).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:船舶管理笔记(1)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: