Implicit Surfaces
Да се реализира пресичане с неявни повърхности, зададени чрез функция f(x, y, z) = 0 (т.е. повърността е точно където функцията се нулира). Проектът е за един, двама или трима студенти.
Намирането на пресечната точка да става чрез постъпково трасиране на лъча (и при преминаване от другата страна на implicit surface-то, да се прави двоично между последните две стъпки), или чрез градиентен метод (дава се предварително максималния градиент на функцията, и стъпките на функцията се определят от този метод). Реализирайте числено смятането на нормалите чрез function gradient.
Проектът е за един, двама или трима студента.
Два "upgrade"-а към задачата:
1) Да се реализира триагонализация на повърхността чрез алгоритъма Marching Cubes;
2) Да се добави възможност функцията да се задава в сценовия файл, като израз (а не да е зададена статично в .CPP кода). Изразът може да съдържа събиране/изваждане/умножение/деление, min(), max(), тригонометрични функции и прочее - т.е., тази подзадача изисква парсването на израз и извеждането на дърво, което да може да смята израза за произволни x, y, z.
Ако проектът се прави от двама студента, то вторият студент си избира да напише един от двата upgrade-а. За трима студента, напишете и двата upgrade-а.