Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
шпоры по кг2 2009.doc
Скачиваний:
2
Добавлен:
01.03.2025
Размер:
1 Мб
Скачать

2. Квадратичные поверхности.

Общий вид:

Нужно найти точку пересечения луча и квадратичные поверхности.

Луч зададим в параметрическом виде:

Введем обозначения:

Подставим в уравнение поверхности:

Раскрываем скобки:

- не пересекаются

- в одной точке либо соприкасаются

- 2 решения

Изображение прозрачных, преломляющих и зеркальных поверхностей.

1 – зеркальное отражение

2 – диффузное отражение

3 – преломление

4 – диффузное преломление

Для каждой поверхности, найдя видимую точку, считаем, что луч состоит из двух составляющих: зеркально – отражающей и преломляющей. Два полученных луча прослеживаем до следующей поверхности и т.д., таким образом строим дерево лучей.

Каждый луч прослеживаем до тех пор, пока:

  1. луч попадает на незеркальную непрозрачную поверхность

  2. луч покидает пределы сцены

  3. луч попадает в источник света

  4. интенсивность луча падает ниже некоторого порога

Отражаемый поверхностью луч состоит из рассеянной, диффузной и зеркальной Iska Iskd cos Iskd cosp* составляющих.

Если луч движется в полупрозрачном теле, то интенсивность луча с расстоянием уменьшается по закону Бугера-Ламберта:

I0 – интенсивность исходного луча

 - коэффициент поглащающей среды

r – расстояние, которое прошел луч

Для вычисления освещенности нужно иметь внешнюю нормаль к поверхности. Если поверхность , точки, для которой принадлежит телу.

Тогда внешняя нормаль:

v – видимая точка

нормаль можно считать внешней, если направление на наблюдателя и направление нормали составляют угол  900, тогда внешняя нормаль:

R – вектор от объекта к наблюдателю.

Управление процессом формирования изображения.

  1. Выбор уравнения дискретизации: на изображение объекта количество точек должно быть таким, чтобы минимально значимая видимая деталь имела размер 2 пикселя.

Пусть имеется матрица рецепторов размерности II , и хотим выбрать расстояние  между рецепторами.

Важно сократить количество вычислений:

  1. распараллелим их: примитивы, входащие в состав объекта окружаем оболочкой (параллепипед или элипсоид)

Находим точку пересечения луча с оболочкой: если луч не пересекается с оболочкой, то и не пересекается с примитивами.

Коэффициенты (габариты) относительно z:

О – оболочка

(для элипсоида)

Детализация поверхностей.

На поверхность надо нанести детали. Проще всего включить в состав объекта многоугольники, описывающие детали.

Но это «накладно»: нужна избыточная память и программирование.

Другой способ – текстурирование: формируется бинарное изображение (bit map), описывающее детали.

Затем отображаем bit map на поверхность.

Другой способ – фрактальные поверхности.

Фрактальный объект получается так: делаем некоторое действие над объектом, а затем повторяем это действие над получившимися частями рекурсивно.

Пусть есть описание объекта – треугольник:

 

Разбиваем его стороны 3-мя точками пополам. Затем их случайно сместим по вертикали:

Точки массива нужно хранить универсально: лучше всего  - мерный массив.

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

Еще способ – внесение случайных или детерминированных искажений в нормаль к поверхности при закраске.

Окраска.

IA – рассеянный свет

Kd – диффузная составляющая

KS – зеркальная составляющая

 - угол между направлением идеального отражения и направлением на наблюдателя.

Kd ,KA , KS : К близкое к 1 – объект блестящий, (металлический)

К0 – объект матовый

Для грязного пола Kd большое, KS мало.

Считаем, что интенсивность источника света: 0 –1 (0-черный 1-белый)

IAна порядки ниже интенсивности источника света.

Получили I:

Видеокарта может работать в режимах:

  1. 24-бит. цвет: 3 составляющие по байту

  2. 16-бит. цвет: 5 красный, 5 зеленый, 6 синий

  3. 4-бит. цвет: всего 16 цветов., 1 бит красный, 1 зеленый, 1 синий, 1 на яркость.

Для 24-битового цвета: для каждой составляющей 256 различных значений: 0-255

Для составляющей: I-255

В Borland цвет точки типа Тcolor:

4 байта: 00000000, R,G,B.

C=RGB(Br,BG,Bb)

В DOS – 16 цветов.

Многоугольник закрашивается функцией FUNoly, но, чтобы получить градацию, в прамоугольнике размещают цветные точки: чем больше их, тем ярче цвет.

Матрица возбуждения:

Пусть I=0.5

для закраски многоугольника 44 пикселя.

16*0.5=8  ставим пикселя в точки, где интенсивность  8.

Текущий ……….цвет и способ заливки устанавливаем процедурой SetFillPattern.