Posts by Iliyana

    Hast du auch beide Zip-Dateien runtergeladen ( common und für dein Betriebssystem )?
    "Pro Plattform sind jeweils 2 Dateien (das plattformspezifische- und zusätzlich das common-Archiv) herunterzuladen, die beide im selben Verzeichnis zu entpacken sind."
    Das hat man bei den älteren Matlab Versionen gebraucht, ich weiss nicht wie es aktuell ist.


    lg

    Danke für die Hilfe!!! Also meine Bilder:
    hier das originale: hier das mit R-G: mark_blue: image_mask: image_convoluted
    lena_color Kopie.jpg lena_output Kopie.png image_mark_blue.png image_mask.png image_convoluted.png bei image_covoluted habe ich immer den richtigen Bereich mit dem übergebenen Kernel punktweise multipliziert (danach nicht durch 9 dividiert, also wirklich die Summe des umgebenden Bereichs auf jeweils das berechnete Pixel abgespeichert), die zwei geteilten habe ich hier nicht gepostet, die stimmen glaub ich!


    Die ersten Bilder sehen gut aus, aber image_convoluted ist definitiv falsch. Meiner Meinung nach nicht nur den rötlichen Stich aber das Bild sieht auch gar nicht geglättet aus. Es kann sein dass du einen Programmierfehler gemacht hast, auch wenn dein Verfahren stimmt, holst du dir die Werte von den richtigen Channels, schau ob du irgendwo Werte nicht überschreibst bzw tatsächlich die Summe über alle Pixel mal Kernel abspeicherst pro Channel. Zum Debuggen von evc_filter könntest du dir eine kleine Matrix mit einfacheren Zahlen erstellen und diese mit einem 3x3 Mittelwertfilter falten.

    Es klingt so als ob du die Textur dem Material vom Objekt nicht zugeweisen hast(oder nicht dem richtigen...). Vielleicht hast du einen Schritt verpasst, siehe hier.

    ja er tritt bei allen auf.


    den Post hab ich schon gesehen. Ich hab alle alten Threads durch. Bei mir tritt es bei beiden Metohden auf und ich weiß nicht ob es ein Bug ist oder ein Fehler meinerseits.
    Ein letztes noch ist die Verarbeitung des Binärbildes richtig oder habe ich es flasch verstanden?


    Das ist komisch, ich kann hier leider nicht sagen wo das Problem liegt. Kannst du mir per PM sagen welches Image Set du hast? Ich empfehle dir aberin die nächste Lab Betreuung zu gehen.


    Wegen evc_compute_binary ja, du musst ein Binärbild erstellen, und nur wenn top == 0 ist, invertieren. Wie du das machst, ob du zuerst top==0 abfragst....kannst du selbst entscheiden.


    lg

    Achso war das gemeint; ich hatte bis jetzt das Programm immer nur mit dem Run Button ausgeführt ^^
    Gibt es keine Möglichkeit, dass im Command Window nichts ausgegeben wird, wenn man den Run Button drückt?


    Ja, du musst vorher die Run Einstellungen anpassen. Diese findest du im Menu, wenn du auf der Datei mit der rechten Maustaste clickst(Run Configurations->Edit Configurations->ein ; nach Images setzen).


    Quote


    Um es genauer zu beschreiben: Ich speichere in image_mark_blue ausschließlich den blauen Farbkanal von image_swapped ab und frage dann image_mark_blue auf >0.5 ab.


    Es gibt verschiedene Möglichkeiten, wie du das machen kannst. Die Idee ist dass du im image_mark_blue die Pixelpositionen markiert hast, bei welchen den blauen Anteil im image_swapped > 0.5 ist. Das ist dann deine Maske für den nächsten Task. In deiner vorigen Post hast du das richtig beschrieben.


    Quote


    Eine andere Möglichkeit die ich mir nämlich gedacht hatte war, dass ich das gesamte image_swapped nehme, also alle 3 Farbkanäle, und diese in image_mark_blue abspeichere. Dann wähle ich von image_mark_blue den blauen Farbkanal aus und ändere nur in diesem die Werte auf logical, wie oben beschrieben, d.h. die anderen beiden Farbkanäle, rot und grün bleiben unverändert vorhanden.


    Diese Variante macht nicht viel Sinn, die unveränderten Rot - und Grün Channels verwendest du gar nicht. Es ist hilfreich die Maske mit drei Channels zu haben, überlege dir aber wenn du sie in dieser Variante anwendest, wie das Ergebnis ausschauen wird.

    Habe leider dasselbe Problem, obwohl ich nirgends die Funktion Images verwende. Ich weise eigentlich nur image_swapped alle Zeilen und Spalten plus den jeweiligen Farbkanal zu und dabei wird trotz Strichpunkt immer etwas ausgegeben, woran könnte das liegen?
    Zb.: image_swapped(:, :, 1) = image(:, :, 2); gibt etwas im Command Window aus, trotz Strichpunkt. Wieso?


    Das kannst du verhindern indem du Images(); ausführst (siehe obige Post).


    Quote

    Ich verstehe auch nicht genau die Angabe für Task 6. Soll man hier das Bild aus Task3 nehmen und jeden Pixel bei dem der blaue Kanal größer als 0.5 ist 1 zuweisen, alle anderen Pixel sollen 0 zugewiesen werden?


    Genau. Du sollst mit diesen Pixeln eine Maske erstellen, die du in Task 7 dann anwendest.


    Tritt der Fehler bei allen Bildern auf?
    Das Problem wurde schon mal diskutiert, vielleicht findest du eine Lösung hier: ab Post #21

    Ja, wie du sehen kannst, sieht das ganze nicht wirklich schön aus.
    Dieses Bild verdeutlich was ich meine: Es gibt nicht nur 3 Grauwerte, sondern mehrere, die nicht mal einheitlich gerendert werden. Sieht so aus, als würden die einzelnen Grauwerte übereinander liegen und somit werden auch weitere Grauwerte "erschaffen", die gar nicht da sein sollten :/
    Bis jetzt habe ich Ghost-, CubeMap- und GlossyShader. Aber die alle habe ich ausgelagert in eigenen Klassen. In CustomShader sollte mein ToonShader implementiert werden, aber es geht ja net. Ist es schlimm, wenn ich CustomShader von der Auswahl entferne?
    EDIT: eine schnelle Antwort wäre sehr nett, da ich Runde 6 schon in diesem Monat abgeben mag.
    teapotCustom.png


    Hi,
    Die Effekte, die du bereits implementiert hast(Ghost-, CubeMap- und GlossyShader), reichen auf jeden Fall aus. Nur nicht vergessen alle in einer custom scene zu zeigen und kurz in der Textbeschreibung darauf hizuweisen, damit wir keins übersehen.


    Sonst wegen ToonShader stimme ich zu dass es nicht optimal ausschaut, eventuell wird es bessere Ergebnisse liefern wenn du NdotL abfragst und einen fixen Grauwert zuweist. Wenn du möchtest schaue dir dieses Bsp an, ist aber nur für eine Lichtquelle gegeben (http://rbwhitaker.wikidot.com/toon-shader).

    Hallo, einen Weg das zu machen wäre es, die Intensitäten für alle Lichtquellen aufzusummieren, und dann diese Summe mit dem Skalarwert multiplizieren, die den Cel Effekt anwendet. Die Ergebnisintensität(einen Vector) kannst du dann weiter verwenden, um mit der Farbe zu multipizieren. Der Skalarwert dient hier als Reflexionsfaktor. Den kannst du z.B. bekommen, indem du über alle Lichtquellen NdotL aufsummierst und dann floor(NdotL * #Graustufen)/#Graustufen ausrechnest(die Formel die auch im anderen Thread erwähnt wurde).
    Es gibt verschiedene Varianten, wie man diesen Effekt implementiert, von diesen die ich kenne, bekommt man schöne Effekte wenn man keine komplexe Texturen und wenig Lichtquellen hat.


    lg

    Im triangleRasterizer sind d0, d1 und d2 0, im DDA rasterizer sind depth1 und depth2 0 (das sind jeweils die argumente, die übergeben werden EDIT: d0, d1, d2 werden nicht direkt übergeben, sondern stammen aus den übergebenen vertices).
    Also kann ich in den rasterizern schlecht was interpolieren, was sowieso ständig 0 ist.
    Dadurch ist natürlich auch mein z-Buffer unterbeschäftig.. :/


    Das ist sehr komisch. Ich kann mir nicht vorstellen dass dieses Problem an Task4 liegen kann, hast du Referenzlösung von Task3 verwendet? Wie sieht es mit Renderer.toPixelCoords() aus, übergibst du dort die Tiefe?

    Hallo, liebe Leute!


    Mein z-Buffer arbeitet nicht wie er soll, da die depth-Werte auf allen Vertices 0 ist (laut debugger). Habe die Tiefenwerte quer durchs Programm untersucht und erhalte überall für alle Vertices 0. Hatte vielleicht noch jemand dieses Problem und konnte es lösen?


    In welcher Methode sind genau deine Tiefenwerte 0? In TriangleRasterizer solltest du nämlich den depth interpolieren und an den framebuffer übergeben. Rufst du da die richtige Methode auf? Eventuell passt etwas bei der Interpolation nicht, wie schauen deine alpha, beta und gamma Werte aus?

    Hallo,
    bei mir tritt die ganze Zeit das Problem aus, dass meine Figuren zu klein dargestellt werden z.b die screen_filling_plane die eigentlich den gesamten Bereich ausfüllen sollte, füllt beim Einlesen der Testscene vielleicht gerade mal ein zehntel aus.
    Hat jemand eine Idee woran das liegen kann bzw. hat jemand vielleicht das gleiche Problem?


    Hast du auf die Referenzlösung aufgebaut? Hast du alle Punkte vom Task4 implementiert bzw welche ja/nein?


    Deine alpha, beta und gamma Werte passen auf jeden Fall nicht, am einfachsten kannst du das mit einer Summe überprüfen, die muss ja immer 1 ergeben. Alpha, beta und gamma musst zum Schluss wieder als floats haben, also single precision. Am einfachsten kannst das eben in dem Schritt machen, wo du mit f multiplizierst. Da hast du was falsch gemacht(siehe Post von ernad.sehic).


    Ja, meistens bedeutet ein schwarzes Bild dass du die Formeln für A und B nicht entsprechend angepasst hast. Überlege dir wie sich die Koordinaten von e1 bzw den orthogonalen Vektor zu e1(siehe Wiki Artikel zu Trinagle Rasterization) ändert wenn der Ursprung top left ist, und reche dir die Formeln so aus.


    Tipp: Bei Multiplikation immer aufpassen welche Precision rauskommt. Eventuell muss das angepasst werden.

    ok ich versteh das mit Winding und y Achse immer noch nicht ganz.... nach der Implementierung von rasterizeTriangle krieg ich nichts, weil kein Punkt als innerhalb vom Dreieck erkannt wird.
    Kann jemand vll kurz erklären?


    Damit du die testen kannst, ob ein Punkt innerhalbt vom Dreieck liegt, musst du ja die im Wiki beschriebenen Gleichungen ausrechnen. Dafür brauchst du die A, B und C-Parameter. In der Angabe hast du auch die Formeln dazu. In unserem Framework liegt aber der Ursprung top left(siehe Angabe), also musst du dir überlegen wie du die Formeln anpassen musst.


    Wegen Winding musst du dir hier keine Gedanken machen(siehe letzte Post von hauns).

    Also Projektion Matrix erstelle ich so:...


    Ja das sieht richtig aus, aber bitte keinen Sourcecode posten. Ich habe gemeint dass du nochmal deinen Code überprüfen kannst wegen Tippfehler.