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; ******************************