Введение в программирование трехмерных игр с DX9

       

Часть II



8.2.3.2. Часть II

В следующей части кода выполняется визуализация зеркала, но только в буфер трафарета. Чтобы запретить запись в буфер глубины мы присваиваем режиму визуализации D3DRS_ZWRITEENABLE значение false. Чтобы заблокировать изменение вторичного буфера, мы присваиваем коэффициенту смешивания источника значение D3DBLEND_ZERO, а коэффициенту смешивания приемника— значение D3DBLEND_ONE. Подставив эти коэффициенты в формулу смешивания мы увидим, что вторичный буфер остается неизменным:

ИтоговыйПиксель =
= ПиксельИсточника 

 (0, 0, 0, 0) + ПиксельПриемника 
 (1, 1, 1, 1) =
= (0, 0, 0, 0) + ПиксельПриемника = ПиксельПриемника

// Запрещаем запись во вторичный буфер и буфер глубины Device->SetRenderState(D3DRS_ZWRITEENABLE, false); Device->SetRenderState(D3DRS_ALPHABLENDENABLE, true); Device->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_ZERO); Device->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_ONE);

// Рисуем зеркало в буфере трафарета Device->SetStreamSource(0, VB, 0, sizeof(Vertex)); Device->SetFVF(Vertex::FVF); Device->SetMaterial(&MirrorMtrl); Device->SetTexture(0, MirrorTex); D3DXMATRIX I; D3DXMatrixIdentity(&I); Device->SetTransform(D3DTS_WORLD, &I); Device->DrawPrimitive(D3DPT_TRIANGLELIST, 18, 2);

// Разрешаем запись в буфер глубины Device->SetRenderState(D3DRS_ZWRITEENABLE, true);



Содержание раздела