Артефакты не из-за грубости меша, а именно из-за способа построения кривой.При таком она по-любому вылезет за многоугольник, больше или меньше. (1)
Грубая отрисовка меша тоже нужна,(2) например чтоб нарубить переборки с достаточной точностью нам HIght не нужен.
Править эти существующие кривые -да. Но вот сделать другие, на основе сабдивижен(3) очень бы пригодилось и сейчас и потом.
Но сначала с настройкой алгоритмов точек конечно надо разобраться.
P/s Кстати, вот как определеляются точки меша, по которым надо кривую провести. С кромками еще более-менее ясно, а вот в середине?(4)
1. Артефакты из-за грубости меша. Вернее из-за несоответствия детальности меша, детальности кривой и ожиданий пользователя.
Если вы залезете в код и посмотрите, то увидите, что кривая рисуется с помошью нескольких прямых.
Количество их 600 (в оригинале). А меш вы сделали с детальностью 6 кусков на "кривую" часть, "домик".
Так вот кривая берет эти 7 точек и на основе их строит свои 600. Ничего при этом не зная о каком-то прямоугольнике.
Да точки кривой вылезут за многоугольник. Потому что многоугольник - это срезанная гладкая фигура, аппроксимация.
Многоугольник используется от экономии комьютерных ресурсов. Представляемой гладкой поверности он касается только точками. А прямые отрезки проходят в глубине представляемого тела. Меш по сути своей является лишь огрубленным приближением к реальному гладкому телу.
Идеальный меш тот, который полностью покроет каждую геометрическую точку тела. Так как точка бесконечно мала, такой меш бесконечно частый. В отличии от мат точки, пиксел на экране имеет размер, и это возможно - подобрать детальность для каждого увеличения, при которой меш будет рисоваться не прямыми отрезками пикселов, а вырожденными до максимум двух пикселей, непосредственно примыкающих друг к другу. Но считать сабдивижены такого меша будет дорого.
Так и в нашем примере. Меш грубый, кривая детальная, но толку нет, только даже вред, так как она построена на очень грубом меше. Она сбивает с толку. Вы ожидаете от нее соответсвованию поверхности. Но она не видит поверхность, а видит лишь аппрокимированный меш, более или менее приближенный к поверхности. В нашем примере - "очень менее".
Чтобы кривая соответствовала, нужно для нее делать детальный сабдивижн от управляющих ребер. Типа такой локальный сабдивижн. Но теоретически локальный сабдивижн невозможен, так как в математической Поверхности все точки меша влияют друг на друга.
Я вообще не понимаю, для чего нужна Кривая в том виде в каком она есть. Как она используется? Просто чтобы ее можно было тягать, когда контрольная сеть выключена и проверять кривизну?
Ну да, это немножко добавляет удобства.
2. Мы не можем делать разную детальность меша для разных участков мат поверхности.
3. Так меш и есть на основе сабдивижн. И те ломаные меша, что Вы уже видите и есть "кривые, на основе сабдивижен".
Если сабдивижн грубее, они более ломаные, если почаще, то они поглаже.
4. Да тот-же сабдивижн и берется. Когда грань подразделяется, ее ребра подразделяются на "крайние" ребра следующего уровня подразделения и тд. Кривой даются точки этих "крайних" ребер.
Сообщение отредактировал mm7: 14 марта 2020 - 18:27