Лабораторные по компьютерной графике

    Разбирая завалы старых программ, нашел кучку лабораторных по компьютерной графике. Все лабораторные написаны на Delphi, поэтому с категорией вопросов не было. Они когда-то лежали у меня на старом сайте, теперь выкладываю их тут.

    Архив с лабораторными: скачать, zip 513Kb.

    Весь список лабораторных:

    • B-сплайн
    • Кривая Эрмита(как в Фотошопе)
    • TCB сплайн
    • Фрактал Мандельброта Z³+C
    • Фрактал «Остров Минковского»
    • Расчёт пересечения двух треугольников
    • Простенький график в полярной системе координат
    • Тест пересечения прямой с полигоном (+рисунок)
    • Изометрическая проекция срезанного куба
    • Ортографическая проекция срезанного куба
    • Косоугольная проекция срезанного куба
    • z-буферизация
    • 3D винт

    B-сплайн

    Часто на практике бывает необходимо изобразить кривую по некоторым заданным значениям. Для построения такой кривой необходимо решать задачу интерполяции.

    Неоднородный рациональный B-сплайн (NURBS, Non-uniform rational B-spline) — математическая форма, применяемая в компьютерной графике для генерации и представления кривых и поверхностей. Является частным случаем B-сплайнов, причём, широко распространённым из-за своей стандартизированности и относительной простоты.

    B-сплайн

    Кривая Эрмита (Сплайн Эрмита)

    Кривые Эрмита (Сплайны Эрмита) - кривые, построенные на основе многочленов Эрмита.

    На практике чаще всего используют многочлены 3-го порядка (т.е. первые четыре). Если необходимо соединить несколько кусков, то в месте стыковки направление касательных для конца одного и начала второго отрезков должно совпадать.

    Кривая Эрмита

    TCB сплайн (Tension, Continuity, Bias)

    TCB сплайн - модификация кривой Эрмита. Часто используется в задачах анимации при моделировании движения с пмощью ключевых кадров (Задается последовательность точек - положения объекта в заданные моменты времени, необходимо провести интерполяционную кривую, которая проходит через эти точки и определяет положение объекта в произвольный момент времени).

    TCB сплайн TCB сплайн

    Фрактал Мандельброта Z³+C

    Фрактал Мандельброта

    Фрактал «Остров Минковского»

    Строится фрактал очень просто. Фрактал нулевого степеня - квадрат. Далее каждая сторона квадрата заменяется ломанной, состоящей из 3 неравных частей: первая - длинной a/4 и под под углом в 45° относительно исходной прямой, вторая - длинной a/2 и под под углом в -45° относительно исходной прямой, и третья - длинной a/4 и под под углом в 45° относительно исходной прямой.

    Далее для построения фрактала степеня выше каждая из сторон ломанной заменяется меньшей ломанной аналогичным способом. Вот что получается:

    Фрактал «Остров Минковского»

    Расчёт пересечения двух треугольников

    Пересечение двух треугольников

    Простенький график в полярной системе координат

    Ну, что тут сказать... На Делфи - 3 строчки кода. Да вот только картинки получаются очень уж красивые. Завораживают больше, чем фракталы (Наверное какое-то естественное стремление к симметрии, как например, к узорам в калейдоскопе). Попробуйте поигратся с коэфициентами - рисунки просто загляденье.

    График в полярной системе координат График в полярной системе координат График в полярной системе координат

    z-buffer (z-буфер)

    Z-буферизация — один из вариантов решения «проблемы видимости». Очень эффективен и практически не имеет недостатков, если реализуется аппаратно. Программно же существуют другие методы, способные конкурировать с ним: Z-сортировка («алгоритм художника») и двоичное разбиение пространства (BSP), но они также имеют свои достоинства и недостатки. Основной недостаток Z-буферизации состоит в потреблении большого объёма памяти: в работе используется дополнительный буфер - буфер глубины или Z-буфер.

    Z-буфер представляет собой двумерный массив, каждый элемент которого соответствует пикселу на экране. При отрисовывании пиксела, его удалённость просчитывается и записывается в ячейку Z-буфера. Если пикселы двух рисуемых объектов перекрываются, то их значения глубины сравниваются, и рисуется тот, который ближе, а его значение удалённости сохраняется в буфер.

    z-буфер на Delphi

    Разрядность буфера глубины оказывает сильное влияние на качество отрисовки: использование 16-битного буфера может привести к геометрическим искажениям, например, эффекту «борьбы», если два объекта находятся близко друг к другу. 24, 32-разрядные буферы хорошо справляются со своей задачей. 8-битные почти никогда не используются из-за низкой точности.

    Хотя z-буфер предназначен именно для того, чтобы обойтись без сортировки видимых граней, скорость работы z-буфера серьёзно зависит от сортировки объектов. Дело в том, что для отбракованного пикселя не запускаются алгоритмы просчёта цвета — текстурирование, освещение и шейдеры. Поэтому для оптимальной работы рендерера, использующего z-буфер, рекомендуется отсортировать видимые объекты в порядке удаления (хотя бы приблизительно).

    Комментарии

    08.04.2014 12:08:42
    Avatar of СветланаСветлана
    Здравствуйте. а можно еще к каждой программе дать математическое описание если можно
    08.04.2014 04:47:20
    Avatar of КонсервКонсерв
    @Светлана
    Да, конечно, могу. С какой программы лучше начать? О чём лучше написать?
    09.04.2014 12:08:55
    Avatar of СветланаСветлана
    В-сплайн и кривая Эрмита, какие значения берутся как вычисляется, просто не совсем понятно
    16.08.2014 11:38:10
    Avatar of 202202
    Спасибо за статью
    08.01.2015 02:44:25
    Avatar of КонсервКонсерв
    @Светлана
    Значения вводятся перетягиванием "рычагов". Эти рычаги - значения векторов Qi.

    В папке TCB есть файл TCB.doc - в нём описана теория.
    29.11.2016 09:10:42
    Avatar of Егор МаркеловЕгор Маркелов
    Здравствуйте. Пишу одну программку и назрела необходимость реализации ортографической проекции. Наткнулся на ваш блог, посмотрел проект. Т.к. знаний и опыта пока совсем мало, назрели вопросы по поводу работы вашей программы. Можно ли где-нибудь с вами подробнее разобрать ее структуру?
    30.11.2016 11:46:51
    Avatar of КонсервКонсерв
    @Егор Маркелов
    Здравствуйте, консультаций не даю. Всё поставляется "как есть" хотите - пользуйтесь, не хотите - не пользуйтесь :-).
    09.10.2018 11:44:27
    Avatar of Гамезо ВладГамезо Влад
    ЗДРУВСТВУЙТЕ,НАДО СПЛАЙН ЭРМИТА!!!БЫСТРО!!!ПОМОГИТЕ!!!НА СИ ШАРПЕЕ
    09.10.2018 08:29:23
    Avatar of КонсервКонсерв
    @Влад
    У вас два выхода - либо самому разобраться и написать, либо заплатить программисту, который разработает вам решение вашей задачи.

    Я консультаций по лабораторным работам не даю и лабораторки не пишу. Если не срочно - я есть на UpWork (ссылка в профиле). Но это будет дорого, как для лабораторки. Вам проще подружиться со студентом-отличником.

    P.S. Все подобные комментарии в будущем буду удалять.
    Captcha Обновить
    Go Top