1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
| IRenderer::Instance().SetMaterial(&m_DefaultMaterial);
// Initialisation
// Melange avec l'alpha
// Utilisation de la couleur fournie par le matériel
// Wrap des textures
IRenderer::Instance().SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
IRenderer::Instance().SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
IRenderer::Instance().SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE);
IRenderer::Instance().SetRenderState(D3DRS_DIFFUSEMATERIALSOURCE, D3DMCS_MATERIAL);
IRenderer::Instance().SetRenderState(D3DRS_AMBIENTMATERIALSOURCE, D3DMCS_MATERIAL);
IRenderer::Instance().SetSamplerState(0, D3DSAMP_ADDRESSU, D3DTADDRESS_WRAP);
IRenderer::Instance().SetSamplerState(0, D3DSAMP_ADDRESSV, D3DTADDRESS_WRAP);
IRenderer::Instance().SetSamplerState(1, D3DSAMP_ADDRESSU, D3DTADDRESS_WRAP);
IRenderer::Instance().SetSamplerState(1, D3DSAMP_ADDRESSV, D3DTADDRESS_WRAP);
// Rendu de la permière couche du terrain : herbe
// Pas de mélange alpha
// Stage 0 : Texture
IRenderer::Instance().SetTextureStageState (0, D3DTSS_COLOROP, D3DTOP_MODULATE);
IRenderer::Instance().SetTextureStageState (0, D3DTSS_COLORARG2, D3DTA_TEXTURE);
IRenderer::Instance().SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_DIFFUSE );
IRenderer::Instance().SetTextureStageState (0, D3DTSS_ALPHAOP, D3DTOP_DISABLE);
IRenderer::Instance().SetTextureStageState (1, D3DTSS_COLOROP, D3DTOP_DISABLE);
IRenderer::Instance().SetTextureStageState (1, D3DTSS_ALPHAOP, D3DTOP_DISABLE);
// On change l'index des coordonnées de textures
IRenderer::Instance().SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, 1);
IRenderer::Instance().SetTextureStageState(1, D3DTSS_TEXCOORDINDEX, 0);
IRenderer::Instance().SetTexture(0, m_Texture[0]);
...Rendu des primitives
// Rendu des autres couches (mélange alpha)
// Stage 0 : alpha
// Stage 1 :texture
IRenderer::Instance().SetTextureStageState (0, D3DTSS_COLOROP, D3DTOP_SELECTARG1);
IRenderer::Instance().SetTextureStageState (0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
IRenderer::Instance().SetTextureStageState (0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);
IRenderer::Instance().SetTextureStageState (0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
IRenderer::Instance().SetTextureStageState (1, D3DTSS_COLOROP, D3DTOP_MODULATE);
IRenderer::Instance().SetTextureStageState (1, D3DTSS_COLORARG1, D3DTA_TEXTURE);
IRenderer::Instance().SetTextureStageState (1, D3DTSS_COLORARG2, D3DTA_DIFFUSE);
IRenderer::Instance().SetTextureStageState (1, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);
IRenderer::Instance().SetTextureStageState (1, D3DTSS_ALPHAARG1, D3DTA_CURRENT);
IRenderer::Instance().SetTextureStageState (2, D3DTSS_COLOROP, D3DTOP_DISABLE);
IRenderer::Instance().SetTextureStageState (2, D3DTSS_ALPHAOP, D3DTOP_DISABLE);
IRenderer::Instance().SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, 0);
IRenderer::Instance().SetTextureStageState(1, D3DTSS_TEXCOORDINDEX, 1);
IRenderer::Instance().SetTexture(1, m_Texture[1]);
IRenderer::Instance().SetTexture(0, m_DensityTexture[0]);
...Rendu des primitives
IRenderer::Instance().SetTexture(1, m_Texture[2]);
IRenderer::Instance().SetTexture(0, m_DensityTexture[1]);
...Rendu des primitives
//Fin du rendu
IRenderer::Instance().SetTexture(0, NULL);
IRenderer::Instance().SetTexture(1, NULL); |
Partager