Task 4.4 Backface Culling

  • Hi,
    ich sitze schon seit einigen Stunden an einem Problem, das ich beim BF-Culling habe.
    Ich wende den vorgeschlagenen Ansatz wie hier:


    http://glasnost.itcarlow.ie/~p…/HSR/backfaceculling.html


    mit dem Dot-Product 1:1 an.


    Jedoch bekomme ich folgende Resultate:
    bfCulling1.pngbfCulling2.pngbfCulling3.png



    Der Torus sieht ja noch einigermaßen okay aus, bei der Sphere ist hinten allerdings noch ein Artefakt übrig und bei Car mehrere.


    Ein weiteres Problem ist, dass das Toggeln des Cullings über die GUI bei mir nicht funktioniert: Es ist immer Enabled.
    Wie ich das beeinflussen kann, ist mir auch noch ein Rätsel.


    Bin für jede Hilfe dankbar!
    LG


    EDIT: Hab die files mal mit der Reference Solution geöffnet, dort sieht das überraschend ähnlich aus, kann das jemand von den TutorInnen bestätigen?
    Den Fehler mit dem Enable/Disable verstehe ich aber immer noch nicht!

  • Danke für den Tipp, aber wenn ich mich nicht irre, ist die Musterlösung vom 4 Task noch nicht online und die Komplette (inkl. Task 6) sieht doch deutlich anders aus! (Shading etc.)


    Stephen_A: Okay, danke für die Info!

  • Hallo,


    Der Source-Code ist noch nicht verfügbar, aber ihr könnt euch jederzeit die vorkompilierte Version zu jedem Task aus dem Wiki herunterladen. Bei jedem Task gibt es unter "Reference solution" einen Download-Link zum Jar (hier für Task4)

    Bernhard Steiner
    [ECG/RTR Übungsleitung]

  • War wie immer zu blind! Danke!


    Edit: Sieht soweit ganz gut aus, nur die Fehlenden senkrechten Linien wie beim Torus in meinem OP sind falsch. Hat dazu wer eine Idee? Ich glaube fast nicht, dass das mit BF-Culling zu tun hat.

  • Habe jetzt denke ich alle Probleme lösen können. Senkrechte Linien wurden wie vermutet wegen eines Tippfehlers nicht gezeichnet.
    Die weißen Linien bei der Scheibe (oben) von car.dae, die bei meinem Urspünglichen Post fehlen, habe ich allerdings nur bekommen, indem ich beim z-Buffering auf <= statt nur < geprüft habe. Passt das oder habe ich da noch wo einen Bug?


    LG

  • ich weiß nicht genau, wo mein Fehler liegt.


    Wenn ich Backface Culling aktiviere werden mir beim Auto auf ein paar Pixel nicht gezeichnet (gelbe Kreise).


    Ohne Backface Culling sieht alles wie in der Referenzlösung aus. Der Fehler tritt nur beim Auto auf.


    car.png

    this one - as it seems to be - wants to be the last one

  • Hallo palace,
    grundsätzlich haben wir im Wiki eine Anleitung bereitgestellt wie du es implementieren kannst:


    Quote

    One easy way to find out the winding of a polygon is by checking the angle between the view vector and the polygons normal. If both vectors are pointing in the same direction, the polygon is back facing. This angle between these vectors can easily be calculated by the dot product of those vectors. If the dot product is < 0 the face is a backface. Backface culling is calculated in Screen Space, thus getting the view vector is trivial in this case. You can assume for the normal vector that all polygons are planar.


    Ich hab mir den Link von dir angeschaut und die Area Methode – „Signed area of triangle“ von der Seite implementiert (Die Lösung gefällt mir ganz gut und man benötigt nur 2 Zeilen Code :thumb:). Insgesamt komme ich zu dem exakt gleichen Ergebnis wie im Wiki!


    Kann es sein, dass du dich bei den Indices verschrieben hast bzw vllt einen falschen Typecast machst?


    Die Formel dort lautet ja: area = 0.5f*((x1-xo)*(y2-y0)...


    Damit du auf dein x1 kommst, rechnest du vertices[1].px, willst du dir beispielsweise y2 ausrechnen machst du das so: vertices[2].py, usw.


    Liebe Grüße,
    Tommy T.

    Thomas Trautner


    EDBV - Tutor WS 2016/17; ECG - Tutor WS 2015/16, WS 2016/17
    CG UE - Tutor SS 2015, SS 2016; EVC - Tutor SS 2014, SS 2015, SS 2016

  • Danke nochmal. Davor habe ich es laut Wiki implementiert. Ich habe es jetzt mit der Area Methode versucht zu implementieren. Das Ergebnis ist jetzt viel besser. Trotzdem werden noch ein paar Kanten nicht entfernt.
    Kann es sein, dass die Depth im DDA-Rasterizer falsch berechnet wird und diese Kanten trotzdem gezeichnet werden? Ich habe die Depths mit (1- t) * d0 +... berechnet.
    Hier meine Lösung und zum Vergleich die Referenzlösung:
    mysolution.pngreferenzsolution.png

  • Lieber palace,


    leider konnte ich deine Attachments nicht öffnen und somit nicht genau schauen was der Fehler sein könnte. Sollte dein Fehler tatsächlich im DDA-Rasterizer liegen, nimm dir die Referenzlösung für diesen Task und kopiere diesen Code-Teil hinein um überprüfen zu können ob es daran liegt.


    Lg,
    Alex

    ASE Tutor WS16
    ECG Tutor WS16