【CSDN浅墨】读书笔记5

CSDN浅墨大神博客专栏:http://blog.csdn.net/column/details/vc-game-programming.html

DirectX提供的快捷几何体绘制:

步骤:

  1. //四步曲之一,定义  
  2. ID3DXMesh* meshBox;  
  3. //四步曲之二,创建  
  4. D3DXCreateBox(  g_pd3dDevice,  2.0f, 2.0f,   2.0f,&meshBox, 0  );  
  5. //四步曲之三,绘制  
  6. g_pd3dDevice->BeginScene();  
  7. meshBox->DrawSubset(0);  
  8. //四步曲之四,释放  
  9. meshBox->Release();  


四大光照类型:

1.环境光

2.漫反射光

3.镜面反射光

4.自发光


三大光源类型:

static D3DLIGHT9 light;
::ZeroMemory(&light, sizeof(light));

1.点光源

light.Type          = D3DLIGHT_POINT;  
light.Ambient       = D3DXCOLOR(0.6f, 0.6f, 0.6f, 1.0f);   
light.Diffuse       = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f);  
light.Specular      = D3DXCOLOR(0.3f, 0.3f, 0.3f, 1.0f);  
light.Position      = D3DXVECTOR3(0.0f, 200.0f, 0.0f);  
light.Attenuation0  = 1.0f;  
light.Attenuation1  = 0.0f;  
light.Attenuation2  = 0.0f;  
light.Range         = 300.0f;  

2.方向光

light.Type          = D3DLIGHT_DIRECTIONAL;  
light.Ambient       = D3DXCOLOR(0.5f, 0.5f, 0.5f, 1.0f);  
light.Diffuse       = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f);  
light.Specular      = D3DXCOLOR(0.3f, 0.3f, 0.3f, 1.0f);  
light.Direction     = D3DXVECTOR3(1.0f, 0.0f, 0.0f);  

3.聚光灯

light.Type          = D3DLIGHT_SPOT;  
light.Position      = D3DXVECTOR3(100.0f, 100.0f, 100.0f);  
light.Direction     = D3DXVECTOR3(-1.0f, -1.0f, -1.0f);  
light.Ambient       = D3DXCOLOR(0.3f, 0.3f, 0.3f, 1.0f);  
light.Diffuse       = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f);  
light.Specular      = D3DXCOLOR(0.3f, 0.3f, 0.3f, 0.3f);  
light.Attenuation0  = 1.0f;   
light.Attenuation1  = 0.0f;   
light.Attenuation2  = 0.0f;   
light.Range         = 300.0f;  
light.Falloff       = 0.1f;  
light.Phi           = D3DX_PI / 3.0f;  
light.Theta         = D3DX_PI / 6.0f;  
最后通过g_p3dDevice设置开启光源

g_pd3dDevice->SetLight(0, &light);
g_pd3dDevice->LightEnable(0, true);
g_pd3dDevice->SetRenderState(D3DRS_AMBIENT, D3DCOLOR_XRGB(36, 36, 36));

g_pd3dDevice->SetRenderState(D3DRS_LIGHTING, true);
g_pd3dDevice->SetRenderState(D3DRS_NORMALIZENORMALS, true);
g_pd3dDevice->SetRenderState(D3DRS_SPECULARENABLE, true);

g_pd3dDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_CCW)

材质

D3DMATERIAL9 mtrl;
::ZeroMemory(&mtrl, sizeof(mtrl));
mtrl.Ambient  = D3DXCOLOR(0.5f, 0.5f, 0.7f, 1.0f);  
mtrl.Diffuse  = D3DXCOLOR(0.6f, 0.6f, 0.6f, 1.0f);  
mtrl.Specular = D3DXCOLOR(0.3f, 0.3f, 0.3f, 0.3f);  
mtrl.Emissive = D3DXCOLOR(0.3f, 0.0f, 0.1f, 1.0f);
g_pd3dDevice->SetMaterial(&mtrl);

顶点法线

使用顶点法线目的是使模型在光照效果下质地更加光滑

你可能感兴趣的:(DirectX,DirectX9,C++,C)