Возможно кодом будет понятнее о чем я.
for( auto pLight : g_pointLightList ) {
if( g_camera->frustum.IsSphereInside( pLight->GetRealPosition(), pLight->GetRadius() ) && pLight->IsVisible() ) {
gpDevice->SetRenderState( D3DRS_COLORWRITEENABLE, 0x00000000 );
gpDevice->SetRenderState( D3DRS_STENCILFUNC, D3DCMP_ALWAYS );
gpDevice->SetRenderState( D3DRS_STENCILPASS, D3DSTENCILOP_KEEP );
RenderIcosphereIntoStencilBuffer( pLight );
mPointLightShader->SetLight( g_camera->invViewProjection, pLight );
mFullscreenQuad->Bind();
gpDevice->SetRenderState( D3DRS_COLORWRITEENABLE, 0xFFFFFFFF );
gpDevice->SetRenderState( D3DRS_STENCILFUNC, D3DCMP_NOTEQUAL );
gpDevice->SetRenderState( D3DRS_STENCILPASS, D3DSTENCILOP_ZERO );
// quad render
mFullscreenQuad->Render();
}
}
Сферка жи помечает фрагменты реально попадающие в радиус действия света. Она рисуется только в трафарет.