ДР/2024/Л9/Група 0

Задачата е се напише нов шейдър, наречен Wireframe, който да изобразява ръбовете на триъгълниците в Mesh-a. Т.е., по ръбовете на триъгълника, шейдърът да връща зелено, а в останалите части - черно (виж примера).

Следвайте първо инструкциите за сваляне на hw9.zip от основната тема за ДР9.

  1. Добавете нов клас Wireframe, наследяващ Shader, и реализирайте computeColor() метода му
  2. Добавете две нови double-а към IntersectionInfo, lambda2 и lambda3. В Mesh::intersectTriangle копирайте сметнатите lambda2 и lambda3 стойности в data структурата
  3. В shade() метода на вашия шейдър, добавете код, който пресмята lambda1 (вижте лекция 7 за детайли) и, ако кое да е от lambda1, lambda2 или lambda3 се окаже по-малко от някаква граница (например 0.08), трябва да върнете зелено; в противен случай, черно.
  4. В scene.cpp, в метода newSceneElement(), регистрирайте вашия шейдър (огледайте се из околния код, за да видите какво трябва да напишете)
  5. В wireframe.hexray добавете блок с вашия шейдър (понеже нямаме параметри, той ще изглежда така):

    Wireframe wireframe {
    }

  6. Укажете шейдъра wireframe да се използва за сърцето, на мястото на white_flat
  7. Задайте да се ползва сцена "data/hw9/wireframe.hexray" в main.cpp

Резултатът ще изглежда нещо подобно на това: пример.

Бонус (1т):
Добавете свойства wireSize, wireColor и outColor към вашия шейдър, които да задават, респективно, границата (от точка 3), и цветовете (вместо зелено и черно). Сложете им стойности по подразбиране в конструктора на Wireframe, и ги регистрирайте, като добавите метода fillProperties() към вашия шейдър (вижте Refraction шейдъра за нагледен пример)

Супер бонус:
Направете частите извън ръбовете на триъгълниците да са прозрачни. Това може да се постигне и в шейдъра, но можете да приложите и друг подход, като модифицирате Mesh::intersectTriangle(). Супер бонуса не носи никакви точки, но можете да го реализирате за собствено забавление ;)