Seite 1 von 1

Selektion darstellen

Verfasst: 09.04.2009, 17:23
von Zudomon
Hallo!

Ich würde gerne Dreiecke von einem Objekt anders einfärben um eine Selektion dieser darzustellen. Man könnte dafür z.B. Vertexfarben benutzen und das Objekt dann neu übergeben. Dies müsste dann immer geschehen, wenn sich die Selektion ändert.

Nun wollte ich fragen, ob jemand vielleicht noch eine bessere Lösung für ein solches Problem kennt.

Gruß
Zudo

Re: Selektion darstellen

Verfasst: 09.04.2009, 17:36
von dowhilefor
In meinem Editor habe ich es über Vertexfarben gemacht. Würdest du jeden Frame die Farbe ändern, wäre das natürlich langsam. Aber Pro Klick kurz VB locken(wenn du DX benutzt) farbe ändern fertig, ist nicht so gravierend. Alternativ wäre es auch möglich die Ausgewählten Objekte, die du ja eh irgendwo speicherst, entweder nochmal mit Alphablending drüber zu zeichnen, oder ohne Shader einfach anderes Licht/Material zu benutzen.

Re: Selektion darstellen

Verfasst: 09.04.2009, 17:55
von Schrompf
Ich würde das Objekt mit einem speziellen Markierungsshader nochmal zeichnen. Der Markierungsshader braucht ja dann nix komplexes zu sein... ein Alphablending auf (1.0, 0.0, 0.0, 0.5) würde ja reichen.

Re: Selektion darstellen

Verfasst: 09.04.2009, 18:52
von Zudomon
Das Problem ist, angenommen das komplette Modell ist weiß, dann will ich in dem einen Fall die ersten 20 Dreiecke rot einfärben... anschließend, mal jedes zweite Dreieck usw.
Es reicht, wenn sich die Änderung auf ein Attribut bezieht, also z.B. zwei verschiedene Farben, wie in dem Beispiel, weiß/rot.

Im Normalfall würde ich wie dowhilefor schon sagte, einfach den Buffer nach der neuen Selektion locken und updaten. Aber vielleicht gibt es ja noch eine elegantere Lösung, bei der ich die Daten nicht noch einmal anfassen muss.

Bei der Objektselektion ist es einfach, da werde ich wirklich einfach die States wechseln können und dann nochmal zeichnen. Aber auf Dreiecksebene wirds schwieriger.

Gruß

Re: Selektion darstellen

Verfasst: 10.04.2009, 00:03
von Chromanoid
Wie legst du denn fest, wann welches Dreieck welche Farbe haben soll?
Vielleicht könntest du ja jedem Vertex eine Face-Nummer oder ein Bit mit geben, damit ein Markierungs-Shader entscheiden kann, wie er das Ding malen soll...
Da kommt es natürlich sehr darauf an, wie stark du das Markieren brauchst...

Re: Selektion darstellen

Verfasst: 10.04.2009, 00:15
von Aramis
Wenn du, wie von Christian vorgeschlagen, den Vertices eine Face-Nummer mitgibst, kannst du die auch in ein separates Rendertarget ausgeben und dann in einem Postprocessing-Pass das fertig gerenderte Bild beliebig markieren, einfärben, whatever, ... eine Textur dient dann als LUT. Natürlich müsstest du die dann dynamisch updaten, aber das wäre eine weitaus geringere Datenmenge.

Du könntest zum nochmaligen Zeichnen der ausgewählten Dreiecke, wie von Thomas vorgeschlagen, auch geschickt den Indexbuffer, falls du einen nutzt, wechseln. Den abzuändern ist flotter als der VB. Falls du keinen nutzt wäre das eventuell eine ganz gute Gelegenheit damit anzufangen :-)

Re: Selektion darstellen

Verfasst: 10.04.2009, 09:43
von Zudomon
Okay,
bei dem Markierungs-Shader stört mich so ein bischen, dass ja ein Vertex entweder mehrere Face-Nummern braucht oder mehrfach vorkommen muss. Da ist auch die Frage, ob die Datenmenge für eine Selektionstextur wirklich wesentlich geringer ist, als die eines Indexbuffers.
Das mit dem Indexbuffer hört sich noch am einfachsten und schnellsten realisierbar an, ohne dafür spezial Shader bauen zu müssen.
Zum Glück verwende ich schon Indexbuffer und man könnte das in absehbarer Zeit mal realisieren :D

Danke für eure Ideen! Und falls jemanden noch was krasses einfällt, immer her damit :D

Gruß
Zudomon