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