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

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

Разбирая завалы старых программ, нашел кучку лабораторных по компьютерной графике. Все лабораторные написаны на 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 КонсервКонсерв
@Егор Маркелов
Здравствуйте, консультаций не даю. Всё поставляется "как есть" хотите - пользуйтесь, не хотите - не пользуйтесь :-).
Captcha Обновить
Go Top