Электронная библиотека

Xakep

Xakep

Технологии демо-мейкинга

Xakep, номер #014, стр. 014-052-3


1. При использовании любой модели освещения должна быть предварительно приготовлена градиентная палитра цветов, то есть каждый следующий цвет должен быть на 1 светлее предыдущего. Демщики же рассчитывают в цикле каждый цвет палитры по реальной формуле освещенности и получают очень яркие области перпендикулярно источнику света. Именно эти белые пятна твой глаз и воспринимает за блики, хотя на самом деле это полная лажа.

2. Заранее рассчитывается таблица значений освещенности для какого-либо вектора света, затем для произвольного вектора осуществляют поворот и выбирают нужное значение из таблицы.

I like to move it, move it!

Движение и маcштабирование. Почему-то все считают эту часть наиболее сложной, хотя, в действительности, это самая примитивная фишка во всей компьютерной графике. Но, как говорится, в действительности все не так, как на самом деле, и без вращения или изменения размера объекта не обходится ни одна дема. Любое движение объекта можно представить в виде двух последовательно выполненных преобразований, примененных ко всем точкам объекта: переноса и вращения. Для переноса точки достаточно просто прибавить к ее координатам необходимые составляющие вектора-переноса. То есть если мне надо перенести точку (x,y,z) на 20 по оси x, то я просто прибавляю 20 к координате х и получаю, соответственно, точку (x+20,y,z). С поворотом же дела обстоят немного сложнее. Открываем учебник аналитической геометрии и ищем там формулу линейного оператора поворота. Находим кучу непонятных матриц, например, для поворота точки вокруг оси z на угол a, там будет дан вот такой оператор:

| cos(a) -sin(a) 0 |

| sin(a) cos(a) 0 |

| 0 0 1 |

Этот бред означает, что придется последовательно пересчитать все координаты следующим путем:

Новый x = x*cos(a)-y*sin(a)+z*0

И все? Все! Масштабирование выполняется точно таким же методом, в смысле, в учебнике ищутся слова "линейный оператор масштабирования" или, по-крестьянски, без особого выпендрежа, все координаты точки умножаются на нужное число.

Растекстурим - затекстурим

Текстурирование - это тоже важная фишка, ну ты шаришь. Суть там в следующем: есть 2D картинка и 3D объект, надо наложить картинку на поверхность объекта. Для этого запоминается много страшных слов вроде "билинейная фильтрация", "перспективная коррекция", "попиксельный миппмэппинг" и тому подобное... Сразу вспоминается фраза "Нет бога, кроме 3Dfx, и Glide - пророк его". Слушай, честно говоря, меня уже сильно тошнит от километровых формул, относящихся к данной теме. Да и я, вообще, после выхода вуду пипла, статьи о текстурировании можно было найти в любом журнале, включая "COOL ЙЕНG" и "Вечерний Некрофил". Так что, я думаю, ты гораздо лучше меня осведомлен об этой фишке. Ну а если не осведомлен, то и хрен с ней. Поверь, психическое здоровье дороже...

Фекалы

То есть, пардон, фракталы. Вообще фракталом называется любое самоподобное множество, то есть множество, часть которого является им же самим. Представь, например, телевизор, который показывает сам себя - это и есть фрактал. Нет, представь лучше телевизор, который показывает только порнуху. Или нет, представь лучше... Гггм, на чем это я остановился? А! Раньше в демках частенько использовались фракталы Мандельброта и Жюлиа - это такие обалденные хреновины, основанные на функции комплексной переменной. Кстати, что такое функция комплексной переменной, тебе лучше никогда не узнавать. Суть этих демок заключалась в следующем: показывался исходный рисунок, а затем камера как бы приближалась к одному из его участков, тот постепенно опять превращался в исходный рисунок и так далее. Довольно часто и сейчас в 4Kb интрах можно увидеть этот эффект, так как он относительно простой для программирования: достаточно лишь закодить одну рекурсивную функцию.

Назад на стр. 014-052-2  Содержание  Вперед на стр. 014-052-4