Selektion darstellen

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
Benutzeravatar
Zudomon
Establishment
Beiträge: 2127
Registriert: 25.03.2009, 08:20
Kontaktdaten:

Selektion darstellen

Beitrag von Zudomon » 09.04.2009, 17:23

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

Benutzeravatar
dowhilefor
Moderator
Beiträge: 173
Registriert: 27.02.2009, 16:44
Alter Benutzername: 6SidedDice
Echter Name: Nico Probst
Wohnort: Bochum
Kontaktdaten:

Re: Selektion darstellen

Beitrag von dowhilefor » 09.04.2009, 17:36

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.
Mein Gehirn besteht nur noch aus einem hash-index, ich weiss was ich kenn aber kenn nicht was ich weiss

Benutzeravatar
Schrompf
Moderator
Beiträge: 3973
Registriert: 26.02.2009, 00:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: Selektion darstellen

Beitrag von Schrompf » 09.04.2009, 17:55

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.
Häuptling von Dreamworlds. Baut an was Neuem. Hilft nebenbei nur höchst selten an der Open Asset Import Library mit.

Benutzeravatar
Zudomon
Establishment
Beiträge: 2127
Registriert: 25.03.2009, 08:20
Kontaktdaten:

Re: Selektion darstellen

Beitrag von Zudomon » 09.04.2009, 18:52

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ß

Benutzeravatar
Chromanoid
Moderator
Beiträge: 3890
Registriert: 16.10.2002, 19:39
Echter Name: Christian Kulenkampff
Wohnort: Lüneburg

Re: Selektion darstellen

Beitrag von Chromanoid » 10.04.2009, 00:03

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

Benutzeravatar
Aramis
Moderator
Beiträge: 1458
Registriert: 25.02.2009, 20:50
Echter Name: Alexander Gessler
Wohnort: 2016
Kontaktdaten:

Re: Selektion darstellen

Beitrag von Aramis » 10.04.2009, 00:15

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

Benutzeravatar
Zudomon
Establishment
Beiträge: 2127
Registriert: 25.03.2009, 08:20
Kontaktdaten:

Re: Selektion darstellen

Beitrag von Zudomon » 10.04.2009, 09:43

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

Antworten