// ShadowVolume.cpp: implementation of the CShadowVolume class. // ////////////////////////////////////////////////////////////////////// #include "ShadowVolume.h" ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// CShadowVolume::CShadowVolume() { } CShadowVolume::~CShadowVolume() { } void CShadowVolume::MakeShadowVolumeDirectionLight(vector3 *pVertex, int nVertex, WORD *pIndices, int nIndices,vector3 vecLightDir) { vector3 vecPoly[3]; vector3 vecNormal; WORD *pEdges=new WORD[nIndices*6]; int nEdges=0; vecLightDir.Normalize(); for(int i=0;i=0.0f) { AddEdge(pEdges,nEdges,pIndices[3*i+0],pIndices[3*i+1]); AddEdge(pEdges,nEdges,pIndices[3*i+1],pIndices[3*i+2]); AddEdge(pEdges,nEdges,pIndices[3*i+2],pIndices[3*i+0]); } } vector3 vecVol[4]; for(i=0;i1) { pEdges[2*i+0]=pEdges[2*(nEdges-1)+0]; pEdges[2*i+1]=pEdges[2*(nEdges-1)+1]; } nEdges--; return; } } pEdges[2*nEdges+0]=v0; pEdges[2*nEdges+1]=v1; nEdges++; } void CShadowVolume::Render(LPDIRECT3DDEVICE8 pd3dDevice) { pd3dDevice->SetVertexShader(D3DFVF_XYZ); if(m_ShadowVolumeVertexList.num>0) pd3dDevice->DrawPrimitiveUP(D3DPT_TRIANGLELIST,m_ShadowVolumeVertexList.num/3,m_ShadowVolumeVertexList.element,sizeof(vector3)); } void CShadowVolume::Reset() { m_ShadowVolumeVertexList.num=0; }