2013-10-21 20 views
5

Ich interessierte mich für das Zeichnen einer Linie mit einer bestimmten Breite (oder mehreren Linien) mit einem Fragment-Shader. Ich stolperte über die this post, die es zu erklären scheint.Fragment Shader - Zeichnen einer Linie?

Die Herausforderung, die ich habe, ist die Logik dahinter zu verstehen.

Ein paar Fragen:

  1. Unser Platz in diesem Beispiel Koordinate (0.0-1.0,0.0-1.0), richtig?
  2. Wenn ja, welchen Zweck hat die Variable "uv"? Da die Dicke 500 ist, wird die "uv" -Variable sehr klein sein. Daher die Abstände von ihm zu Pont 1 und 2 (in den Variablen a und b gespeichert)?
  3. Schließlich, was ist die Logik hinter der Variable h?

Antwort

2

Ich werde versuchen, alle Ihre Fragen eine nach der anderen zu beantworten:

1) Ja, das ist in der Tat richtig.

2) In 3D-Computergrafiken ist es üblich, Koordinaten (innerhalb bestimmter Grenzen) mit Fließkommawerten zwischen 0 und 1 (oder zwischen -1 und 1) auszudrücken. Zuallererst macht dies es ziemlich einfach zu entscheiden, ob ein gegebener Wert die Grenze überschreitet oder nicht, und abstrahiert von einem Konzept, bei dem "Pixel" eine diskrete Bildeinheit ist; außerdem kann diese übliche Praxis ziemlich überall sonst gefunden werden (denken Sie an Gerätekoordinaten oder Texturkoordinaten)

Haben Sie keine Angst, dass Werte, mit denen Sie arbeiten, weniger als eins sind; In der Computergrafik beschäftigen Sie sich normalerweise mit Fließkomma-Arithmetik und FLOAT-Typen sind ziemlich gut darin, die Real-Werte-Linie um den "1" -Punkt herum auszudrücken.

3) Die Formel geben für h besteht aus 2 Teilen: der Quadratwurzel Teil und der 2/c-Koeffizient. Der Quadratwurzelteil sollte aus Scholl-Math-Klassen bekannt sein - das ist Heron-Formel für die Fläche eines Dreiecks (zwischen a, b, c). 2/c extrahiert die Höhe des Dreiecks, die in h gespeichert ist und ist auch der Abstand zwischen dem Punkt uv und der "Grundlinie" des Dreiecks. Diese Entfernung wird dann verwendet, um zu entscheiden, wo uv in Bezug auf die Linie p1-p2 steht.