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).

In your call to D3DXMatrixPerspectiveFovRH. you're setting the z-near paraameter to 0.0. That value should be anything above 0.0. Using 0.0 causes a divide by zero in the transformation phase and that can cause problems like the one you're having. Try changing 0.0 to 1.0 or 0.1 or something and see if that works.

If bladder's point doesn't resolve the issue for you, you should make sure that your Z buffer is "big" enough. How many polys are you rendering? You may need to use D3DFMT_D32, or D3DFMT_D24S8 in your presentation parameters instead of D3DFMT_D16 when creating your device.