ДР/2024/Л9/Група 0
- Forums:
Задачата е се напише нов шейдър, наречен Wireframe, който да изобразява ръбовете на триъгълниците в Mesh-a. Т.е., по ръбовете на триъгълника, шейдърът да връща зелено, а в останалите части - черно (виж примера).
Следвайте първо инструкциите за сваляне на hw9.zip от основната тема за ДР9.
- Добавете нов клас Wireframe, наследяващ Shader, и реализирайте computeColor() метода му
- Добавете две нови double-а към IntersectionInfo, lambda2 и lambda3. В Mesh::intersectTriangle копирайте сметнатите lambda2 и lambda3 стойности в data структурата
- В shade() метода на вашия шейдър, добавете код, който пресмята lambda1 (вижте лекция 7 за детайли) и, ако кое да е от lambda1, lambda2 или lambda3 се окаже по-малко от някаква граница (например 0.08), трябва да върнете зелено; в противен случай, черно.
- В scene.cpp, в метода newSceneElement(), регистрирайте вашия шейдър (огледайте се из околния код, за да видите какво трябва да напишете)
- В wireframe.hexray добавете блок с вашия шейдър (понеже нямаме параметри, той ще изглежда така):
Wireframe wireframe {
} - Укажете шейдъра wireframe да се използва за сърцето, на мястото на white_flat
- Задайте да се ползва сцена "data/hw9/wireframe.hexray" в main.cpp
Резултатът ще изглежда нещо подобно на това: пример.
Бонус (1т):
Добавете свойства wireSize, wireColor и outColor към вашия шейдър, които да задават, респективно, границата (от точка 3), и цветовете (вместо зелено и черно). Сложете им стойности по подразбиране в конструктора на Wireframe, и ги регистрирайте, като добавите метода fillProperties() към вашия шейдър (вижте Refraction шейдъра за нагледен пример)
Супер бонус:
Направете частите извън ръбовете на триъгълниците да са прозрачни. Това може да се постигне и в шейдъра, но можете да приложите и друг подход, като модифицирате Mesh::intersectTriangle(). Супер бонуса не носи никакви точки, но можете да го реализирате за собствено забавление ;)