Fragment-Shader PixelPosition on Triangle

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
Eiven
Beiträge: 2
Registriert: 28.03.2004, 00:14

Fragment-Shader PixelPosition on Triangle

Beitrag 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?
Benutzeravatar
Schrompf
Moderator
Beiträge: 5045
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas
Wohnort: Dresden
Kontaktdaten:

Re: Fragment-Shader PixelPosition on Triangle

Beitrag 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.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
dot
Establishment
Beiträge: 1745
Registriert: 06.03.2004, 18:10
Echter Name: Michael Kenzel
Kontaktdaten:

Re: Fragment-Shader PixelPosition on Triangle

Beitrag 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...
Benutzeravatar
mnemonix
Establishment
Beiträge: 101
Registriert: 09.04.2010, 20:38

Re: Fragment-Shader PixelPosition on Triangle

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