so i would like create collison on my fps camera, i want to put a sphere at the cameras positon and do face to face collison with other 3d models rendering, i have decided to use this library
http://sourceforge.net/projects/coldet/?source=typ_redirect
this is what i am doing in code
CollisionModel3D* model; //private member of the camera class
//intialization in the camera constructor
D3DXCreateSphere(gd3dDevice, 2.0f, 8, 8, &Sphere, NULL);
model = newCollisionModel3D(); //coldet object
LockMesh();
i am not sure why its crashing, the locking mesh function works fine without the coldet stuff because ive written the vertices to a .txt file before, something is going wrong with the coldet object its self i think
void Camera::LockMesh()
{
BYTE* lpbVb;
int numIndices;
BYTE *lpIB;
DWORD idxVbVert0, idxVbVert1, idxVbVert2;
D3DINDEXBUFFER_DESC ibdesc;
LPDIRECT3DINDEXBUFFER9 lpIndexBuffer = NULL;
Sphere->LockVertexBuffer(D3DLOCK_READONLY, (VOID**)&lpbVb);
Sphere->LockIndexBuffer(D3DLOCK_READONLY, (VOID**)&lpIB);
Sphere->GetIndexBuffer(&lpIndexBuffer);
lpIndexBuffer->GetDesc(&ibdesc);
if (ibdesc.Format == D3DFMT_INDEX32)
{
//MessageBox(NULL, "ibdesc.Format 32", "", 0);
numIndices = ibdesc.Size / sizeof(DWORD);
}
else
{
//MessageBox(NULL,"ibdesc.Format 16","",0);
numIndices = ibdesc.Size / sizeof(WORD);
}
DWORD numBytesPerVertex = Sphere->GetNumBytesPerVertex();
for (int i = 0; i < numIndices; i += 3)
{
idxVbVert0 = ((WORD*)lpIB)[i];
idxVbVert1 = ((WORD*)lpIB)[i + 1];
idxVbVert2 = ((WORD*)lpIB)[i + 2];
D3DXVECTOR3 v0 = *(D3DXVECTOR3*)&lpbVb[idxVbVert0 * numBytesPerVertex];
D3DXVECTOR3 v1 = *(D3DXVECTOR3*)&lpbVb[idxVbVert1 * numBytesPerVertex];
D3DXVECTOR3 v2 = *(D3DXVECTOR3*)&lpbVb[idxVbVert2 * numBytesPerVertex];
model->addTriangle(v0, v1, v2); //coldet
//Verts1.push_back(v0);
//Verts2.push_back(v1);
//Verts3.push_back(v2);
}
Sphere->UnlockIndexBuffer();
Sphere->UnlockVertexBuffer();
model->finalize(); //coldet
}