ДР/2015/Л9/Група 1

Укажете на рендера да ползва сцената "data/hw9/axe_test.trinity".
Да се напише нов шейдър, наречен Wireframe, който да изобразява ръбовете на триъгълниците в Mesh-a. Т.е., по ръбовете на триъгълника, шейдърът да връща зелено, а в останалите части - черно (виж примера). За целта:

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

    Wireframe wireframe {
    }

  6. Укажете шейдъра wireframe да се използва за сърцето, на мястото на white_flat

Пример: click.

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

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

Comments

Проблем в Mesh::intersectTriangle

Здравей

Тези дни отделих време и си написах шейдъра, обаче определено не ми се получаваха нещата.
Ползвах homework9 за база.

Пренаписах го върху homework13 и учудващо има голяма разлика(работи). Направих си един прост правоъгълник разбити на триъгълници и homework9 вариантът изкарваше само 1 триъгълник от 16. Позадълбах малко и се оказа, че върнатият триъгълик от intersecTriangle е пресечен от лъча отвън.

Позволено ли е да си пратя решението базирано върху homework13?

Да, щом работи :)

Да, щом работи :)