//初始化部分 // 创建一个cube g_Box = new Cube(g_Device); // 设置方向光源 D3DLIGHT9 light; ::ZeroMemory(&light, sizeof(light)); light.Type = D3DLIGHT_DIRECTIONAL; light.Type = D3DLIGHT_DIRECTIONAL; light.Ambient = D3DXCOLOR(0.8f, 0.8f, 0.8f, 1.0f); light.Diffuse = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f); light.Specular = D3DXCOLOR(0.2f, 0.2f, 0.2f, 1.0f); light.Direction = D3DXVECTOR3(1.0f, -1.0f, 0.0f); g_Device->SetLight(0, &light); g_Device->LightEnable(0, true); g_Device->SetRenderState(D3DRS_NORMALIZENORMALS, true); g_Device->SetRenderState(D3DRS_SPECULARENABLE, true); // 创建一个纹理 D3DXCreateTextureFromFile(g_Device, "crate.jpg", &g_Tex); // 设置纹理过滤器 //g_Device->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR); //g_Device->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR); //g_Device->SetSamplerState(0, D3DSAMP_MIPFILTER, D3DTEXF_LINEAR); // 高质量贴图,需要硬件支持,用前查询CAPS结构 g_Device->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_ANISOTROPIC); g_Device->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_ANISOTROPIC); g_Device->SetSamplerState(0, D3DSAMP_MIPFILTER, D3DTEXF_ANISOTROPIC); g_Device->SetSamplerState(0,D3DSAMP_MAXANISOTROPY,4); // 设置投影矩阵 D3DXMATRIX proj; D3DXMatrixPerspectiveFovLH( &proj, D3DX_PI * 0.5f, // 90 - degree (float)WINDOW_WIDTH / (float)WINDOW_HEIGHT, 1.0f, 1000.0f); g_Device->SetTransform(D3DTS_PROJECTION, &proj);
//显示部分 if (g_Device) { static float angle = (3.0f * D3DX_PI) / 2.0f; static float height = 2.0f; if( ::GetAsyncKeyState(VK_LEFT) & 0x8000f ) angle -= 0.5f * timeDelta; if( ::GetAsyncKeyState(VK_RIGHT) & 0x8000f ) angle += 0.5f * timeDelta; if( ::GetAsyncKeyState(VK_UP) & 0x8000f ) height += 5.0f * timeDelta; if( ::GetAsyncKeyState(VK_DOWN) & 0x8000f ) height -= 5.0f * timeDelta; D3DXVECTOR3 position( cosf(angle) * 3.0f, height, sinf(angle) * 3.0f ); D3DXVECTOR3 target(0.0f, 0.0f, 0.0f); D3DXVECTOR3 up(0.0f, 1.0f, 0.0f); D3DXMATRIX V; D3DXMatrixLookAtLH(&V, &position, &target, &up); g_Device->SetTransform(D3DTS_VIEW, &V); // 绘制场景 g_Device->Clear(0, 0, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, 0x00008060, 1.0f, 0); g_Device->BeginScene(); g_Device->SetMaterial(&d3d::WHITE_MTRL); g_Device->SetTexture(0, g_Tex); g_Box->draw(0, 0, 0); g_Device->EndScene(); g_Device->Present(0, 0, 0, 0); }