Code:
void CEngine::Draw3DBoundingBox( LTVector mins, LTVector maxs, D3DCOLOR color )
{
if( !m_pDevice )
return;
const unsigned short index[] = {0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 3, 7, 2, 6, 0, 4, 1, 5};
struct VertexData
{
float x, y, z;
D3DCOLOR color;
float tu, tv;
};
VertexData ObjectBounds[8];
#define SET_OBJECT_BOUNDS_VEC_VALUE( i, o, t, w, c ) \
ObjectBounds[i].x = o; ObjectBounds[i].y = t; ObjectBounds[i].z = w; \
ObjectBounds[i].color = c; ObjectBounds[i].tu = 0.0f; ObjectBounds[i].tv = 0.0f;
SET_OBJECT_BOUNDS_VEC_VALUE( 0, mins.x, mins.y, mins.z, color );
SET_OBJECT_BOUNDS_VEC_VALUE( 1, maxs.x, mins.y, mins.z, color );
SET_OBJECT_BOUNDS_VEC_VALUE( 2, maxs.x, mins.y, maxs.z, color );
SET_OBJECT_BOUNDS_VEC_VALUE( 3, mins.x, mins.y, maxs.z, color );
SET_OBJECT_BOUNDS_VEC_VALUE( 4, mins.x, maxs.y, mins.z, color );
SET_OBJECT_BOUNDS_VEC_VALUE( 5, maxs.x, maxs.y, mins.z, color );
SET_OBJECT_BOUNDS_VEC_VALUE( 6, maxs.x, maxs.y, maxs.z, color );
SET_OBJECT_BOUNDS_VEC_VALUE( 7, mins.x, maxs.y, maxs.z, color );
m_pDevice->SetFVF( D3DFVF_XYZ|D3DFVF_DIFFUSE|D3DFVF_TEX1 );
m_pDevice->DrawIndexedPrimitiveUP( D3DPT_LINELIST, 0, 24, 12, (void *)index, D3DFMT_INDEX16, ObjectBounds, sizeof( VertexData ) );
}
void CEngine::Draw3DBoundingBoxChams( LTVector mins, LTVector maxs, D3DCOLOR color1, D3DCOLOR color2 )
{
m_pDevice->SetRenderState( D3DRS_ZENABLE, FALSE );
m_pDevice->SetRenderState( D3DRS_ZFUNC, D3DCMP_NEVER );
Draw3DBoundingBox( mins, maxs, color1 );
m_pDevice->SetRenderState( D3DRS_ZENABLE, TRUE );
m_pDevice->SetRenderState( D3DRS_ZFUNC, D3DCMP_LESSEQUAL );
Draw3DBoundingBox( mins, maxs, color2 );
}
This is from a CS:S D3D Base BUT it also works on CA