2. Афинное
Этот метод текстурирования основан на приближении u, v линейными функциями. Итак, пусть u - линейная функция, u = k1*sx+k2*sy+k3. Можно посчитать k1, k2, k3 исходя из того, что хотя бы в вершинах грани u должно совпадать с точным значением - это даст нам три уравнения, из которых быстро и просто находятся эти коэффициенты, и потом считать u по этой формуле. Но это все равно медленно - два умножения на пиксел.
Будем рисовать грань по строкам - это общепринято, довольно просто, и не доводит до умопомешательства кэш-память процессора. Вершины грани заранее отсортируем по sy (например, A.sy <= B.sy <= C.sy). Для каждой строки можно посчитать начальное значение x, u (так же, как и для x, ведь u по любой прямой меняется тоже линейно), а также длину этой строки.
В нарисованном случае, например,
x_start = A.sx+(current_sy-A.sy)*(C.sx-A.sx)/(C.sy-A.sy),
u_start = A.u+(current_sy-A.sy)*(C.u-A.u)/(C.sy-A.sy),
x_end = A.sx+(current_sy-B.sy)*(B.sx-A.sx)/(B.sy-A.sy),
length = x_end - x_start.
Какие вершины использовать в этих формулах - это уже проблемы рисования треугольника, а не текстурирования. Лично я просто храню x_start, x_end, u_start, на каждом переходе вниз на строчку прибавляю к
delta_x_start = (C.sx-A.sx)/(C.sy-A.sy),
и аналогично высчитываемые приращения для x_end, u_start. Вот только надо аккуратно следить за тем, какая сторона правая, какая - левая, и на каком мы сейчас промежутке находимся - то ли AB, то ли BC, и соответственно изменять приращения. Впрочем, все это - уже обыкновенное рисование треугольника. В примерах просто сделано решение "в лоб" - проверяем, какой участок - AB или BC - пересекает текущая строка, считаем x/u/v на обоих концах, считаем длину строки и берем соответствующие левому концу (то есть меньшему x) значения u и v.
Так вот. Посчитали начало строки, длину строки, u в начале строки. Осталось заметить, что раз уж u = k1*sx+k2*sy+k3, то при переходе к следующему пикселу строки у нас u изменяется на k1 (так же известный как du/dsx). Это число и надо как-то посчитать. Например, так:
x_start = A.sx+(B.sy-A.sy)*(C.sx-A.sx)/(C.sy-A.sy),
x_end = B.sx,
u_start = A.u+(B.sy-A.sy)*(C.u-A.u)/(C.sy-A.sy),
u_end = B.u,
du_dsx = (u_start-u_end)/(x_start-x_end).
du/dsx - просто число, оно не меняется на всем треугольнике, поэтому просто считаем его там, где удобно, и берем посчитанное значение.
v (из тех же соображений) считается абсолютно точно так же, надо только во всех приведенных формулах u заменить на v, и все.
Теперь осталось только взять и нарисовать эту строку:
// ...
u = u_start;
v = v_start;
for (current_sx = x_start; \
current_sx <= x_end; current_sx++)
{
putpixel(current_sx, \
current_sy, texture[(int)v][(int)u]);
u += du_dsx;
v += dv_dsx;
}
// ...
Пройдясь по всем строкам грани - т.е. пробежавшись current_sy по значениям от A.sy до C.sy (вершины отсортированы!), получим текстурированную грань. Voila!
Билинейная фильтрация текстур.
Текстура - это 2D картинка, а 2D картинка в свою очередь - набор замеров цвета через какие-то промежутки. В реальной же жизни цвет не меняется скачком через каждый, например, миллиметр, а является какой-то непрерывной функцией от положения. При обычном текстурировании мы получаем координаты в текстуре, округляем их до ближайшего целого числа и выбираем нужный цвет из текстуры. То есть мы как бы берем значение цвета в самой близкой к рисуемой точке сетки замеров цвета, поэтому у нас цвет резко меняется, оставаясь непрерывным между узлами сетки, поэтому возникает эффект больших квадратов.
При билинейной фильтрации цвет всего-навсего линейно интерполируется между узлами сетки замеров.
Используя линейную интерполяцию вычислим интенсивность в точке А:
Мипмэппинг.
Если полигон относительно сильно удален или повернут, так, что соседним пикселам на экране соотвествуют сильно разнесенные точки текстуры, то возникают всякие неприятные артефакты. Они возникают потому, что при текстурировании мы выбираем лишь какую-то одну точку текстуры, а реально в экранный пиксел будет проецироваться несколько текселов.
Поэтому для удаления артефактов используется мипмэппинг. Для каждой текстуры заранее создается несколько ее копий уменьшенного размера (1/4, 1/8, и так далее), а далее при текстурировании используется либо сама текстура, либо подходящая уменьшенная копия.
Схема построения – берется базовая текстура и каждые ее четыре точки усредняются до одной.
При использовании мипмэппинга текстурирование осуществляется следующим образом:
начиная с базового уровня определяется количество текселей на один пиксель
если выясняется, что на 1 пиксель приходится некратное 4 число текселей, используют линейную фильтрацию текстур (выборка текселей из 2-х соседних уровней текстур)
Как создать уменьшенную в два раза копию текстуры? Здесь мы опишем три метода, два из них очевидны, третий позаимствован у Crystal Space. Методы расположены в порядке уменьшения скорости и увеличения качества уменьшенной текстуры.
Метод 1. Выкинуть все пикселы текстуры с нечетными координатами. Самый простой, самый быстрый, но дает не очень хорошо выглядящие результаты.
Метод 2. Оставить точки с четными координатами, в каждой точке усреднить значения цвета в этой точке и ее трех соседях (справа, снизу и справа-снизу).
- Билет 1
- 2.Геометрические преобразования в трехмерной графике. Матрицы преобразования.
- Трехмерные аффинные преобразования
- 3. Составить электрическую схему автоматизированного рабочего места инженера на базе пэвм
- Билет 2
- Билет 3
- 2. Понятие телеобработки. Терминальная и системная телеобработка
- 1. 1 Основные положения телеобработки данных
- 1. 2 Системная телеобработка данных
- 1. 3 Сетевая телеобработка данных
- Билет 4
- 2.2. Структура и состав экспертной системы
- Структура базы знаний
- Механизм логического вывода.
- Модуль извлечения знаний.
- Система объяснения
- Билет 5
- 1. Целочисленные задачи и методы их решения.
- 2. Открытые вычислительные сетевые структуры. Эталонная модель
- 3. Записать алгоритм решения системы линейных уравнений методом итераций
- 2. Открытые вычислительные сетевые структуры. Эталонная модель
- Эталонная модель osi
- Уровень 1, физический
- Уровень 2, канальный
- Уровень 3, сетевой
- Протоколы ieee 802
- 3. Записать алгоритм решения системы линейных уравнений методом итераций
- Билет 6
- 2. Окна в компьютерной графике. Алгоритмы преобразования координат при выделении, отсечении элементов изображения.
- 3. Как определить информацию о памяти (размер озу ...)
- Билет 7
- 1. Понятие структурной организации эвм
- 2. Проекции в трехмерной графике. Их математическое описание. Камера наблюдения.
- Билет 8
- Основные подходы к разработке по. Методы программирования и структура по.
- Билет 9
- 2. Принципы построения и функционирования эвм. Принцип программного управления.
- 3. Алгоритм определения скорости передачи с нгмд на нжмд
- Билет 10
- 1. Организация диалога в сапр
- 2. Видеоконтроллеры, их стандарты для пэвм типа ibm pc.
- 3. Текстуры в машинной графике.
- 3. Текстуры в машинной графике.
- 2. Афинное
- Билет 11
- 3. Реалистичная графика. Обратная трассировка луча.
- Билет 12
- 2. Цвет в машинной графике. Аппроксимация полутонами.
- Алгоритм упорядоченного возбуждения
- 3. Представить алгоритм определения тактовой частоты цп
- Билет 13
- 1. Структурное программирование при разработке программы.
- 2. Понятие критерия оптимального проектирования и его связь с варьируемыми переменными через уравнения математической модели. Постановка задачи оптимального проектирования.
- 3. Представить алгоритм определения быстродействия нгмд в режиме записи данных.
- 2. Понятие критерия оптимального проектирования и его связь с варьируемыми переменными через уравнения математической модели. Постановка задачи оптимального проектирования.
- 3. Представить алгоритм определения быстродействия нгмд в режиме записи данных.
- Билет 14
- 3. Таблицы истинности, совершенные нормальные формы представления булевых функций
- Бинарные функции
- 2. Задачи безусловной и условной оптимизации
- 2. Классификация центральных процессоров Intel и соответствующих локальных и системных шин пэвм типа ibm pc
- 3. Реалистичная графика. Обратная трассировка луча.
- Билет 16
- Построение с использованием отношений
- Построение с использованием преобразований
- 3.Составить алгоритм поиска экстремума функции двух переменных
- Билет 17
- 1.Методы представления знаний в экспертных системах
- 2.4.2 Искусственный нейрон
- 2.Устройства автоматизированного считывания графической информации (сканеры). Конструкция и основные характеристики.
- 3. Составьте программу для определения скорости передачи информации по сети одной эвм к другой.
- Билет 18
- 1. Системно-сетевая телеобработка
- 2. Тестирование программ.
- Билет 19
- 3. Графические форматы. Bmp, gif и jpeg.
- 1. Понятие алгоритма. Свойства. Способы записи.
- 2. Построение реалистичных изображений. Алгоритм построения теней в машинной графике.
- 3. Представить алгоритм определения быстродействия нгмд в режиме чтения данных.
- Билет №21
- 3. Приоритетные методы удаления скрытых поверхностей. Bsp – деревья.
- Билет 22
- 2.Методы проверки работоспособности объектов на этапе проектирования: "наихудшего случая" и имитационного моделирования
- 1. Метод наихудшего случая
- 2. Метод имитационного моделирования
- Билет 23
- 1. Функциональные узлы последовательностного типа: регистры, триггеры, счетчики.
- 2. Назначение, классификация математических моделей и методы их построения. Проверка адекватности математических моделей
- 3. Алгоритмы сжатия графических данных.
- Асинхронный rs – триггер.
- Синхронный rs–триггер.
- Синхронный д-триггер
- Счетный т-триггер.
- Двухступенчатые триггеры.
- Счетчики.
- Классификация счетчиков.
- Регистры
- 2. Назначение, классификация математических моделей и методы их построения. Проверка адекватности математических моделей.
- Билет 24
- 1. Математические модели процессов теплопереноса.
- 1 Вариант
- 2 Вариант-
- 2.Интерполяционные кривые в машинной графике.
- Билет 25
- 1. Трансляторы. Виды. Состав.
- 2. Технические средства диалога машинной графики (световое перо, мышь, шар, джойстик). Конструкция основные характеристики
- 3. Записать алгоритм решения нелинейного уравнения методом Ньютона.
- Билет 26
- 1. Автоматизация методов управления, вариантного, адаптивного и нового планирования в астпп.
- 2. Модели гидродинамики
- 3. Записать алгоритм поиска экстремума функции Розенброка овражным методом.
- Автоматизация метода вариантного планирования
- Автоматизация метода адаптивного планирования тпп
- Автоматизация метода нового планирования тпп
- Оптимизация проектирования сборочных процессов
- 1.Модель гидродинамики идеальной смешение:
- 3. Гидродинамические диффузионные модели.
- 4.Гидродинамическая модель ячеечного типа.
- 3. Записать алгоритм поиска экстремума функции Розенброка овражным методом.
- Билет 27
- Общая интерпретация реляционных операций
- Билет 28
- 1.Понятие языков программирования и их классификация. Жизненный цикл программы.
- 2.Реляционная модель данных. Сравнение с иерархической и сетевой моделями.
- 3.Написать алгоритм вычисления определенного интеграла методом трапеций.
- 2. Реляционная модель данных. Сравнение с иерархической и сетевой моделями.
- 3.Написать алгоритм вычисления определенного интеграла методом трапеций.
- Билет 29
- 2. Декомпозиция отношений. Первая, вторая и третья нормальные формы.
- 3. Записать алгоритм поиска экстремума функции
- Билет 30
- 2. Декомпозиция отношений. Первая, вторая и третья нормальные формы.
- 3. Написать алгоритм вычисления определенного интеграла методом трапеций.
- Билет 31
- Выбор компонентов