Also Ihr D3Dler habt merkwürdige Probleme.
Nie würde ich die
API als solche in Frage stellen, wohl aber die Dokumentation mit der man sich rumplagen muss. Ist die in den letzten 3 Jahren nicht besser geworden...
Aber gut, zu deinem Problem. Ich kenne mich nicht mit Managed
DirectX aus, aber mit
OpenGL und D3D8. Also betrachte einmal meine Hilfe als "Glaskugel" aus dem Jenseits ... folgende mögliche Szenarien:
1.Der Tiefenpuffer muss mit einer Bitrate versehen sein. Bei
OpenGL geschieht dies bei der Initalisierung. Bei
D3D mußte man dies IMAO ... irgendwann danach machen und zwar bei Device selbst. Suche mal beim Device nach etwas wie ... ja, wie ging MS Speak. IMAO sprach man von Stencils. Also irgend etwas wie Device.DepthStencilFormat suchen und schauen auf was dieses eingestellt ist. Evtl. ist dies nicht initalisiert oder sehr ungenau. Entferne die Distanz zwischen den Objekten (mehre volle Einheiten) und schau ob es evtl. dann behoben ist.
2. Fällt weg, da Du angibst, den Tiefenbuffer im Renderstate zu aktiveren. Ich traue Dir zu True und false zu unterscheiden (schaue trotzdem nochmal nach im Verlauf des Abends, nimmt das merkwürdige Formen an
3. Der Tiefenbuffer wird nicht geleert. Bei
OpenGL geschieht dies mit glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT). Eine solche (oder ähnliche) Methode wird es vermutlich auch beim Device geben. Evtl. heißt es ein wenig anderes, aber das Prinzip sollte gleich sein.
Das sind eigentlich die drei möglichen Schwachstellen, die das von Dir beschriebene Problem erklären könnten. Ansonsten halt soviel wie möglich deaktivieren um Wechselwirkung anderer Techniken auszuschließen.