ShadowMap1、原理阴影实时渲染是计算机图形学的高级技术。它能提高场景的真实感。两种通用的阴影渲染技术分别是地图阴影(shadow map)和体积阴影(shadow volumes)。地图阴影的优势在于效率很高,因为地图阴影只需要渲染场景两次(一般来说)。并且不需要进行几何处理和产生额外的mesh。无论多复杂的场景,使用地图阴影总能保持很好的性能。
地图阴影的概念很直观。首先,从光线的方向把整个场景渲染到一张纹理上。通过特定的顶点和像素渲染器渲染得到的这张纹理就被叫做地图阴影(shadow map)。这张纹理的特点是其上每一个像素记录的不是该像素的颜色,而是像素的深度。记某个像素点的深度为Di。
接下来再一次渲染场景,本次渲染过程中,计算每一个与地图阴影对应的每个像素点到光源的距离,记作Dj。然后把Di与Dj进行比较,如果两者匹配,该像素不在阴影中。如果Di小于Dj,该像素在阴影中。
最后,根据比较结果,像素渲染器更新每一个像素的颜色。渲染地图阴影最适合的灯光是聚光灯(spotlight),因为地图阴影通过投影场景到其上面而被渲染。
程序初始化阶段,范例创建一张D3DFMT_R32F格式的纹理来承载shadowmap,选择这种格式的纹理是因为地图阴影只需要一个通道(记录深度),32位能够提供足够的精度。渲染由两个部分组成:
1、创建阴影地图。
2、通过阴影地图渲染场景。
2、创建地图阴影(ShadowMap)地图阴影首先将用于承载地图阴影的纹理作为渲染目标。
锐亚教育

锐亚教育,游戏开发论坛|游戏制作人|游戏策划|游戏开发|独立游戏|游戏产业|游戏研发|游戏运营| unity|unity3d|unity3d官网|unity3d 教程|金融帝国3|8k8k8k|mcafee8.5i|游戏蛮牛|蛮牛 unity|蛮牛

LPDIRECT3DSURFACE9 pOldRT = NULL; V( pd3dDevice->GetRenderTarget( 0, pOldRT ) ); LPDIRECT3DSURFACE9 pShadowSurf; if( SUCCEEDED(g_pShadowMap->GetSurfaceLevel( 0, pShadowSurf ) ) ) { pd3dDevice->SetRenderTarget( 0, pShadowSurf ); SAFE_RELEASE( pShadowSurf ); }