void CShadow::onTick(float fElapsedTime) { for (unsigned int i(0); i < m_vMesh.size(); i++) { D3DXVECTOR3 vSun(*m_pSun); D3DXMATRIX mInv; D3DXMatrixInverse(&mInv, NULL, m_vMat[i]); D3DXVec3TransformCoord(&vSun, &vSun, &mInv); ID3DXMesh* pMesh; m_vMesh[i]->CloneMeshFVF(m_vMesh[i]->GetOptions(), D3DFVF_XYZ, CDirect3D::getInstance()->GetD3D9Device(), &pMesh); D3DXVECTOR3 *pVertices, *pVolume; WORD* pIndices; pMesh->LockVertexBuffer(NULL, (void**) &pVertices); pMesh->LockIndexBuffer(NULL, (void**) &pIndices); DWORD dwFaces(pMesh->GetNumFaces()); WORD* pEdges = new WORD[dwFaces*3*2]; DWORD dwEdges(0); for (DWORD j(0); j < dwFaces; j++) { WORD wFace0 = pIndices[j*3]; WORD wFace1 = pIndices[j*3+1]; WORD wFace2 = pIndices[j*3+2]; D3DXVECTOR3 v0 = pVertices[wFace0]; D3DXVECTOR3 v1 = pVertices[wFace1]; D3DXVECTOR3 v2 = pVertices[wFace2]; D3DXVECTOR3 vCross1(v2-v1); D3DXVECTOR3 vCross2(v1-v0); D3DXVECTOR3 vNormal; D3DXVec3Cross(&vNormal, &vCross1, &vCross2); if (D3DXVec3Dot(&vNormal, m_pSun) > 0.f) { AddEdge(pEdges, dwEdges, wFace0, wFace1); AddEdge(pEdges, dwEdges, wFace1, wFace2); AddEdge(pEdges, dwEdges, wFace2, wFace0); } } m_dwTriangles[i] = dwEdges*2; m_vVB[i]->Lock(0, sizeof(D3DXVECTOR3)*m_dwTriangles[i]*3, (void**) &pVolume, NULL); // some (solvable, but expensive) issues here: // (view port related) direction undetermined for segment v1 - v2, // so CULL_CW doesn't necessarily mean 'back side'. for (DWORD j(0); j < dwEdges; j++) { D3DXVECTOR3 v1 = pVertices[pEdges[2*j+0]]; D3DXVECTOR3 v2 = pVertices[pEdges[2*j+1]]; D3DXVECTOR3 v3 = (v1 - vSun); D3DXVECTOR3 v4 = (v2 - vSun); pVolume[j*6] = v3; pVolume[j*6+1] = v1; pVolume[j*6+2] = v4; // 1 2 pVolume[j*6+3] = v4; // |\| pVolume[j*6+4] = v1; // 3 4 pVolume[j*6+5] = v2; } m_vVB[i]->Unlock(); pMesh->UnlockVertexBuffer(); pMesh->UnlockIndexBuffer(); Safe_Release(pMesh); Safe_Delete_Array(pEdges); } }
void CDebug::Destroy() { Safe_Release(m_pGridVB); Safe_Release(m_pLineVB); for( int i = 0; i < LOG_COUNT; ++i) { Safe_Delete_Array(m_StaticLog[i]); Safe_Delete_Array(m_Log[i]); Safe_Release(m_Text3D[i]); //Safe_Delete_Array(m_vList[i]); } Safe_Delete_Array(m_StaticLog); Safe_Delete_Array(m_Log); Safe_Release(m_Line); Safe_Release(m_pFont); // 폰트 구조체해제 DeleteObject(m_hFont); DeleteDC(m_hdc); }
DepthBuffer::~DepthBuffer() { Safe_Delete_Array(m_DepthBuffer); }
void CMesh::Destroy() { Safe_Delete_Array(m_arrayTexture); }