Einzelnen Beitrag anzeigen

Benutzerbild von TOC
TOC

Registriert seit: 5. Jan 2005
Ort: Trier
248 Beiträge
 
Delphi 7 Personal
 
#1

Mit DirectX->DrawPrimitive umrandete Flächen zeichnen

  Alt 14. Nov 2009, 05:37
Hi!

Also, vorab: Ich Verwende immer noch Delphi 3.0 Pro , mangels eine besseren Version, zusammen mit DelphiX von Hiroyuki Hori .
Ich habe zwar auch ein Delphi7 Pe, auch mit DelphiX, aber ich verwende es nur sehr ungern zum programmieren. Aber dass nur zur Info, meine Frage bezieht sich mehr auf Microsoft DirectX.

Ich habe folgendes Problem: Ich möchte mit der Function "DrawPrimitive" eine Fläche (bestehend aus mehreren Dreiecken) rendern und mit einer Farbe ausfüllen (also OHNE Texture). Ok, das klappt. Aber ich möchte dass das Dreieck sagen wir mal Innen mit Rot ausgefüllt und außen herum ein blauer Rand gezeichnet wird. Und das ist das Problem, ich weiß echt nit wie. Ich habe schon die halbe MSN-Bib nach einer Lösung abgesucht. Es gibt nämlich ein Problem mit dem Z-Puffer bei dieser Sache. Also, im Moment zeichne ich das Dreieck (bzw. eine komplexere Form aus Dreiecken) mit DrawPrimitive->TriangleList oder ->TriangleStrip, und anschließend zeichne nochmal den Rahmen herum mit DrawPrimitive->LineList oder ->LineStrip. Das ist erstens nicht sehr Effektiv und zweitens führt dies dazu das der Rand um das Objekt herum optisch zerrissen wird, also keine durchgezogene Linie. Und das liegt daran das der (blaue) Pixel vom Rand in Z-Richtung mal vor, mal hinter dem (roten) Pixel der Dreieck-Fläche berechnet wird . Je nachdem wie ich die Form sich dann im 3D-Raum bewegen und rotieren lasse ist der Rahmen mal durchgezogen, mal gestrichelt und mal leider völlig unsichtbar.

Meine Frage: Kennt einer von Euch eine Lösung für diese Problem? Vielleicht einen RenderState denn man setzen kann? Oder irgendeinen FillMode, oder was auch immer.

Ich bin für jeden Hinweis zur Lösung dieses Problems echt dankbar.

MfG, TOC!
Lars Uwe Hohmann
"Wäre die Erde eine Bank, ihr hättet sie längst gerettet!"
(Zitat GreenPeace)
  Mit Zitat antworten Zitat