Задание объектов и сцен
Предположения и соглашения
Задание объектов и сцен
Проецирование
Матричные преобразования
Результат меняется от перестановки мест множителей!!! Формально определяется как определитель...
Чтобы было хоть чуть-чуть понятно, пример умножения строки на столбец (они должны быть равной...
То есть результат - это (x+dx,y+dy,z+dz)
Можно даже вывести формулы для такого поворота и убедиться в том, что они очень громоздкие
Но есть еще параллельный перенос, есть еще масштабирование
Вот и все
Рисование одноцветного треугольника
уем этот отрезок, повторяем процедуру для каждой строки - и вуаля, трегуольник нарисован
Работа с произвольной камерой
В любом случае, если (a,b,c) - координаты точки в системе координат камеры (точнее, в системе...
Оно задается обратной матрицей к T, то есть такой матрицей T1, что
Приводим r и q к длине 2*lp*tan(FOV/2)
Отброс нелицевых граней
Нас интересует видимость грани из нашей камеры, а камера у нас зафиксирована в точке (0,0,-dist)
Алгоритм художника
Z-буфер
Порталы
Room(currentRoom, fullScreen);
Z-отсечение
Их и рисуем вместо грани
Отсечение
В этом случае нам надо пропустить первые (-start_x) пикселов, так что сдвигаем все интерполируемые...
Применяя алгоритм несколько раз, получаем методы отсечения в выпуклый полигон (например, прямоугольник...
Ищем точку пересечения, находим точку A, добавляем ее в список вершин результата
Еще один метод - это 3D-отсечение, когда все полигоны отсекаются областью зрения камеры
Например, для стандартной камеры в этом случае плоскости запишутся так:
Тогда 3D-отсечение можно сделать вообще до всяческих преобразований сцены, минимизировав...
Так что наиболее подходящий метод выбирайте сами
ТЕКСТУРИРОВАНИЕ
Для нее D = A+a*(B-A)+b*(C-A), так как она лежит в грани
В процессе подстановок что-то сократится, что-то упростится, но формулы для Du и Dv все равно...
ТЕКСТУРИРОВАНИЕ Аффинное
Вот только надо аккуратно следить за тем, какая сторона правая, какая - левая, и на каком...
Voila!
ТЕКСТУРИРОВАНИЕ Перспективно-корректное
Каждую линию рисуем кусками по 8/16/32 пикселов (на самом деле, кусками любой длины; просто...
Осталось сказать еще пару слов о кое-какой оптимизации
ТЕКСТУРИРОВАНИЕ Параболическое
Найдем теперь du и ddu
Расчет ua, va и иже с ними можно сделать с помощью трех делений, деления на length и (length*length)...
Билинейная фильтрация текстур
Пусть iu, iv - целые части координат текстуры точки u, v; fu, fv - дробные части
Памяти, конечно, не жалко, но кэш-память пока не резиновая, так что чем меньше lookup-таблица...
Мипмэппинг
Методы расположены в порядке уменьшения скорости и увеличения качества уменьшенной текстуры
С другой стороны, здесь использутся один и тот же уровень уменьшения (он же уровень детализации...
Но и ее можно убрать
Модель освещения
Поэтому имеет смысл все векторы перед использованием привести к длине 1, тогда косинус угла...
Расчет нормали к объекту
OfVertics; i++) { vertexNormal[i]
Освещение по Ламберту
Освещение по Гуро
Освещение по Фонгу
Общий случай можно без особых вычислительных затрат привести к этому упрощенному, как - будет...
Результаты выглядят действительно получше
Как совместить текстуру и освещение
После чего использовать палитру получившейся картинки, а в качестве таблицы (colorTable) будет...
Использовать большую таблицу и занести в нее все возможные комбинации цвета и градации освещения
PTC - это такая графическая система для C++, взять ее можно на Приемы оптимизации для процессоров Intel Pentium
Если хотя бы одно из условий не выполняется, то исполняется только первая команда, вторая...
На процессоре Pentium без MMX этот байт считается префиксом
Такое случается в следующих случаях:
Кэш-память
Поэтому к моменту самого первого чтения в ecx в кэше точно не окажется свободной кэш-линии...
Примеры внутренних циклов текстурирования
Только вот согласно правилам спаривания, половина команд в этом цикле не спарится, и цикл...
Кроме того, требует более подробного рассмотрения фрагмент с add и adc, об этом более подробно...
Но на самом деле, он может пригодиться в том случае, если циклу с 24:8 fixedpoint не хватит точности
Использование инструкций MMX
Собственно освещение занимает лишь 2 такта
Это просто табличка дробных частей в готовом для MMX-умножения виде:
Тайловые текстуры
Вот пример для текстуры размера 256x256 и тайла размера 8x8:
Поэтому начинаем заниматься оптимизацией
Зато теперь не будет работать сложение, не вызывающее переноса - в этом случае единички останутся...
TILE_U_MASK; dv = make_tile_v(dv) | TILE_V_MASK; for (current_sx = x_start; current_sx
Здесь битовая раскладка выглядит следующим образом:
Субпиксельная точность
Кстати, ни один из примеров к FAQ'у потерей субпиксельной точности не страдает, так как для...
Субтексельная точность
Поворот 3D вектора за шесть умножений
Алгоритм "бегущих кубиков" для полигонизации изоповерхностей
Разбиваем его сеткой, ну, как бы разрезаем его на несколько меньших параллелипипедов, и считаем...
Тогда поверхность проходит через точки (*), приближаем их линейной интерполяцией и проводим...
Формат 3DS-файла
То есть, скажем, CHUNK_OBJMESH нам надо знать из-за того, что каждый объект в сцене описывается...
Точка с U=0, V=0 - левый верхний край текстуры; U=1, V=1 - правый нижний; U=0
Каждому объекту присваивается его порядковый номер при следовании в файле, поле parent выставляется...
Все последующие задают "добавочный" поворот, который надо добавить ко всем, уже сделанным
Всего может быть до пяти разных параметров сплайна, появление каждого из них задается каким-то...
Сплайны Кочанека-Бартельса
Совпадение самих значений функции требуется для непрерывности получаемой приближающей функции...
Они считаются через заданные (они же ключевые) значения нашей функции в самой точке-ключе...
При continuity = 0 они (ra и rb) равны, при continuity = 1 ra удваивается, а rb становится равным нулю
Они контролируют нелинейность движения по полученной кривой в зависимости от времени - или...
Кватернионы
Поворот относительно оси (x,y,z) (иными словами, поворот вокруг вектора (x,y,z), проведенного...
Все это называется сферической линейной интерполяцией (spherical linear interpolation, если...
Но хочется ведь интерполировать сплайнами Кочанека-Бартельса (далее везде, где используется...
Далее, сравнивая g(t) с полученной в Осталось выяснить, как из этого кватерниона получить что-нибудь более привычное - скажем, матрицу поворота
Обратная трассировка лучей
На самом деле, компоненты diffuse и specular в этом уравнении для большей реалистичности с...
Еще надо отметить, что обычно объекты непрозрачны и поэтому преломлением пренебрегают
Содержание