Stencil shadow rendering(question to tom)

Blitz3D Forums/Blitz3D Programming/Stencil shadow rendering(question to tom)

hello everybody...or rather: hello tom!

i have got a question to toms dx7 dll:

well, i have managed a first little system in my team, and now i have got following problem: if the camera gets inside the volume, the shadows are looking corruptly... have you any idea??

Function Render(shadows = False)
If shadows Then
	;Build volumes
	ClearSurface VolumeSurface
	sl.ShadowLight = First ShadowLight
	For sm.ShadowMesh = Each ShadowMesh
		If sm\casting Then CreateVolume(sm\ent, sl\ent, sl\parallel)
	Next
	;Render Shadow
  HideEntity ShadowPlane
	HideEntity VolumeMesh
	For sm.ShadowMesh = Each ShadowMesh
		ShowEntity sm\ent
	Next
	SetRenderState(Direct3DDevice7, D3DRS_ZWRITEENABLE, True)
	SetRenderState(Direct3DDevice7, D3DRS_STENCILENABLE, False)
	SetRenderState(Direct3DDevice7, D3DRS_ALPHABLENDENABLE, False)
  DeviceClear(Direct3DDevice7, 7, $00008080, 1, 0)
  CameraClsMode ShadowCam, True, True
  UpdateWorld
  RenderWorld
  CameraClsMode ShadowCam, False, False
	For sm.ShadowMesh = Each ShadowMesh
		HideEntity sm\ent
	Next
	ShowEntity VolumeMesh
	SetRenderState(Direct3DDevice7, D3DRS_ZWRITEENABLE, False)
	SetRenderState(Direct3DDevice7, D3DRS_STENCILENABLE, True)
	SetRenderState(Direct3DDevice7, D3DRS_STENCILFUNC, D3DCMP_ALWAYS)
	SetRenderState(Direct3DDevice7, D3DRS_STENCILREF, 1)
	SetRenderState(Direct3DDevice7, D3DRS_STENCILMASK, $FFFFFFFF)
	SetRenderState(Direct3DDevice7, D3DRS_STENCILWRITEMASK, $FFFFFFFF)
  SetRenderState(Direct3DDevice7, D3DRS_CULLMODE, D3DCULL_CCW)
	SetRenderState(Direct3DDevice7, D3DRS_STENCILZFAIL, D3DSTENCILOP_KEEP)
	SetRenderState(Direct3DDevice7, D3DRS_STENCILFAIL, D3DSTENCILOP_KEEP)
	SetRenderState(Direct3DDevice7, D3DRS_STENCILPASS, D3DSTENCILOP_INCR)
	SetRenderState(Direct3DDevice7, D3DRS_ALPHABLENDENABLE, True)
	SetRenderState(Direct3DDevice7, D3DRS_SRCBLEND, D3DBLEND_ZERO)
	SetRenderState(Direct3DDevice7, D3DRS_DESTBLEND, D3DBLEND_ONE)
	RenderWorld
	SetRenderState(Direct3DDevice7, D3DRS_STENCILPASS, D3DSTENCILOP_DECR)
	SetRenderState(Direct3DDevice7, D3DRS_CULLMODE, D3DCULL_CW)
	RenderWorld
	SetRenderState(Direct3DDevice7, D3DRS_CULLMODE, D3DCULL_CCW)
	HideEntity VolumeMesh
	SetRenderState(Direct3DDevice7, D3DRS_ZWRITEENABLE, True)
	SetRenderState(Direct3DDevice7, D3DRS_STENCILENABLE, False)
	SetRenderState(Direct3DDevice7, D3DRS_ALPHABLENDENABLE, False)
	SetRenderState(Direct3DDevice7, D3DRS_ZENABLE, False)
	SetRenderState(Direct3DDevice7, D3DRS_STENCILENABLE, True)
	SetRenderState(Direct3DDevice7, D3DRS_ALPHABLENDENABLE, True)
	SetRenderState(Direct3DDevice7, D3DRS_SRCBLEND, D3DBLEND_SRCALPHA)
	SetRenderState(Direct3DDevice7, D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA)
	SetRenderState(Direct3DDevice7, D3DRS_STENCILREF, 1)
	SetRenderState(Direct3DDevice7, D3DRS_STENCILFUNC, D3DCMP_LESSEQUAL)
	SetRenderState(Direct3DDevice7, D3DRS_STENCILPASS, D3DSTENCILOP_REPLACE)
	ShowEntity ShadowPlane
	RenderWorld
	SetRenderState(Direct3DDevice7, D3DRS_ZENABLE, True)
	SetRenderState(Direct3DDevice7, D3DRS_STENCILENABLE, False)
	SetRenderState(Direct3DDevice7, D3DRS_ALPHABLENDENABLE, True)
	HideEntity ShadowPlane
	SetRenderState(Direct3DDevice7, D3DRS_ALPHABLENDENABLE, False)
Else
	HideEntity ShadowPlane
	CameraClsMode ShadowCam, True, True
	RenderWorld
EndIf
End Function