I used right handed Cartesian coordinates in my Direct3D9 application.
It may be useful to show you some code for better understanding:
// attaching a Z buffer to the target surface
// initialising states
lpD3D9Device->SetRenderState( D3DRS_ZENABLE, D3DZB_TRUE ) ;
lpD3D9Device->SetRenderState(D3DRS_ZFUNC, D3DCMP_GREATEREQUAL ) ;
// Calculating view and projection matrices
GetBoundingSphere(&vCenter,&fRadius); // Center and radius of the object to show.
D3DXMatrixPerspectiveFovRH(&matProj,D3DX_PI/4,1.0f ,0.0f, vCenter.z-fRadius*5);
// Clearing render surface
lpD3D9Device->Clear( 0, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER,
D3DCOLOR_XRGB(0,0,0), 1.0f, 0 );
Light source is directional (towards negatif Z)
The issue is that hidden pixels are not eliminated, so the object seems to be transparent.
It works successfully if I use W buffer (D3DRS_ZENABLE, D3DZB_USEW) with some graphic cards (TNT2, RADEON 7000), but I couldn't use it because some cards didn't support W buffering (bad results with GEFORCE MX 4000 and FX 5200).