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
Selektion darstellen
- dowhilefor
- Moderator
- Beiträge: 173
- Registriert: 27.02.2009, 15:44
- Alter Benutzername: 6SidedDice
- Echter Name: Nico Probst
- Wohnort: Bochum
- Kontaktdaten:
Re: Selektion darstellen
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
- Schrompf
- Moderator
- Beiträge: 5163
- Registriert: 25.02.2009, 23:44
- Benutzertext: Lernt nur selten dazu
- Echter Name: Thomas
- Wohnort: Dresden
- Kontaktdaten:
Re: Selektion darstellen
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.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Re: Selektion darstellen
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ß
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ß
- Chromanoid
- Moderator
- Beiträge: 4286
- Registriert: 16.10.2002, 19:39
- Echter Name: Christian Kulenkampff
- Wohnort: Lüneburg
Re: Selektion darstellen
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...
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...
- Aramis
- Moderator
- Beiträge: 1458
- Registriert: 25.02.2009, 19:50
- Echter Name: Alexander Gessler
- Wohnort: 2016
- Kontaktdaten:
Re: Selektion darstellen
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 :-)
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
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
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