Seite 1 von 1

Fragment-Shader PixelPosition on Triangle

Verfasst: 20.09.2013, 12:34
von Eiven
Hallo,
die eigentliche Frage zu formulieren fällt mir etwas schwer.
Mein Problem ist ich möchte gern einen Rand um mein Polygon zeichnen.
Mit Texturen gelingt es mir auch recht leicht, entweder über eine Textur mit integrierten Rand oder im Fragment-Shader mittels uv-Coords.
Nun möchte ich aber gern auch Dreiecke ohne Textur verwenden also Vertices nur mit Farbwerten.
Wie kann ich in so einem Fall dann uv-Coords ermitteln?
Ein erster Ansatz war für mich über den interpolierten Farbwert zu ermitteln wo ich mich befinde allerdings komme ich so nicht wieder auf den Farbwert.
Für mich klingt mein Vorhaben eigentlich banal gibt es evtl. eine einfachere Lösung?

Re: Fragment-Shader PixelPosition on Triangle

Verfasst: 20.09.2013, 13:06
von Schrompf
So einfach geht das nach meinem Verständnis nicht. Du könntest einfach auf ... urg, wie hieß es noch... Outline Rendering? umschalten und die gewünschten Meshes nochmal rendern. Dann macht der Grafikkartentreiber für Dich pro Dreieck drei Linien auf. Man könnte aber auch im Vertex Shader anhand der ab DX10 verfügbaren Eck-Indizes eine neue Vertexkomponente erfinden, die je nach Dreieck-Ecke (0,0), (1,0), (0,1) annimmt. Die bekommst Du dann ordentlich interpoliert in den FragmentShader rein und kannst daraus berechnen, wie nah Du an der Dreieckskante bist.

Re: Fragment-Shader PixelPosition on Triangle

Verfasst: 20.09.2013, 13:41
von dot
Mach dir drei Vertex Attribute, jedes proportional zum Abstand zu einer der drei Dreieckskanten. Dann einfach nurmehr im Fragment Shader checken, ob einer der drei interpolierten Abstände unter einem Schwellwert liegt und fertig. Alternativ kannst du auch was Komplexeres als eine einfache Sprungfunktion nehmen, um z.B. Aliasing zu vermeiden...

Edit: Ich nehme an, das ist auch, was Schrompf bereits vorgeschlagen hat...

Re: Fragment-Shader PixelPosition on Triangle

Verfasst: 20.09.2013, 16:08
von mnemonix
Es gibt hier einen schönen kurzen Artikel mit Code, wie du mithilfe von baryzentrischen Koordinaten Dreieckskanten im Fragment-Shader einfärben kannst um ein gefülltes oder nicht gefülltes Drahtgittermodell deines Modells zu erhalten. Ich glaube Schrompf und dot wollten darauf hinaus. Der Artikel referenziert auch noch ein interessantes Paper zu dem Thema.