alpha+beta+gamma > 1 Aenderung Formeln baryzent. notwendig? DDARasterizer Problem

  • Hallo


    problem 1 : alpha+beta+gamma immer > 1.


    Muss man wegen des Ursprungs (0,0 = links oben) irgendwelche der Gleichungen fuer die baryzentrischen Koordinaten aendern ?


    Also zb -C1/-C2/-C3 in C1/C2/C2 das Vorzeichen aendern weil der Ursprung links oben ist. Oder A, B anders ?


    Ich bekomme naemlich fuer alpha+beta+gamma immer > 1. Und ich kann nicht den Fehler finden.


    Ich rechne C1, C2, C3 und O1, O2, O3 in in fixed precision (8 Stellen).
    f1 (1/O1(V1), f2, f3 und alpha, beta, gamma in float.
    alpha ist so definiert O1/256.0f*f1


    Auch bin ich mir nicht sicher ob beim iterieren durch bounding box (min/max von x und y) irgendetwas wegen dem Ursprung links oben zu vertauschen ist.
    Ich iteriere dezeit von min x zu max x (1./aeussere loop) und von min y zu max y (2./innere loop).
    min x (minimale x wert aller vertices). max x (maximale x wert aller vertices).
    min y (minimale y wert aller vertices). max y (maximale y wert aller vertices).


    problem 2: DDARasterizer wird in meinem Programm nirgendwo aufgerufen


    PS. Noch eine Frage: DDARasterizer wird in meinem Programm nirgendwo aufgerufen. Sollte es nicht aufgerufen werden ?
    Vielleicht hatte ich etwas bei einem frueheren task etwas falsch.. Ich kann leider nicht finden wo es aufgerufen werden sollte.


    Vielen Dank


    Bild im Anhang - vielleicht kann man daran was erkennen Unbenannt.jpg

  • problem 1:
    Dadurch, dass die fixed precision aufgeteilt wird, musst du in der Methode nurnoch weitere 4 Bits hinzufügen. Da können sich leicht Fehler einschleichen.
    Ich glaub alpha+beta+gamma sollten immer (ungefähr) 1 ergeben. Weshalb es reichen sollte, zu prüfen ob sie jeweils größer 0 sind. Wenn nach dieser Überprüfung (man kann einfach weiße Pixel setzen, anstatt sich mit die Farbe "falsch" zu errechnen) die Form nicht stimmt, hast du einen Fehler in den Ebenengleichungen an sich, sonst müsste der Fehler an der fixed precision oder den Berechnungen von f liegen.


    problem 2:
    DDARasterizer wird nur verwendet, wenn er gebraucht wird. Wenn du Dreiecke ausmalst, brauchst du keine Linien mehr, es seidenn du schaltest den Linemode ein oder Lässt Hilfelinien anzeigen (in der Leiste View konfigurierbar)