Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Освещение трехмерного объекта




Рассмотрим, как можно определить цвет пикселей изображения поверхности согласно взаимному расположению поверхности и источника света и наблюдателя.

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

Рис. 3.8.

Рассеянный свет. Ia*Ka. В итоге мы получаем значение интенсивности света:

где I— интенсивность источника света, Kd и Kа — коэффициенты, которые учитывает свойства материала поверхности. Значение Kd и Kа находится в диапазоне от 0 до 1. Интенсивность отраженного света не зависит от расположения наблюдателя.

Рис. 5. Освещение (источник света справа от объекта)

Программная реализация: Находим координаты нормали

x1 = koord[0, 0]; x2 = koord[1, 0]; x3 = koord[2, 0];

y1 = koord[0, 1]; y2 = koord[1, 1]; y3 = koord[2, 1];

z1 = koord[0, 2]; z2 = koord[1, 2]; z3 = koord[2, 2];

xA = y1 * z2 + y2 * z3 + y3 * z1 - y2 * z1 - y3 * z2 - y1 * z3;

yA = z1 * x2 + z2 * x3 + z3 * x1 - z2 * x1 - z3 * x2 - z1 * x3;

zA = x1 * y2 + x2 * y3 + x3 * y1 - x2 * y1 - x3 * y2 - x1 * y3;

Параллельно вычисляем координаты средней точки грани

foreach (MyPoints point3 in A[i].Points)

{

if (j < 3)

{

koord[j, 0] = point3.x;

koord[j, 1] = point3.y;

koord[j, 2] = point3.z;

}

j++;

xo += point3.x;// суммируем для средней точки плоскости

yo += point3.y;

zo += point3.z;

}

Вычисляем значение косинуса тета

xB = xL - xo;

yB = yL - yo;

zB = zL - zo;

long_A = Math.Sqrt(Math.Pow(xA, 2) + Math.Pow(yA, 2) + Math.Pow(zA, 2));

long_B = Math.Sqrt(Math.Pow(xB, 2) + Math.Pow(yB, 2) + Math.Pow(zB, 2));

cos_AB = (xA * xB + yA * yB + zA * zB) / long_A / long_B;

Теперь когда у нас все данные есть, мы вычисляем интенсивность цвета грани

A[i].MyColor = Color.FromArgb((int)(A[i].Color.R * (ka + kd * cos_AB)),

(int)(A[i].Color.G * (ka + kd * cos_AB)),

(int)(A[i].Color.B * (ka + kd * cos_AB)));

 

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

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

 


Руководство для пользователя

После запуска приложения перед Вами появится его главное окно.

Рис. 6.1. Вид главного окна

Здесь мы указываем размеры нашего объекта и нажимаем кнопку "Создать".

Переключаемся на следующую вкладку "Трехмерные преобразования".

Рис. 6.2. Вид окна "Трехмерные преобразования"

Здесь мы можем производить трехмерные преобразования с моделью (перенос, поворот, масштабирование). Выставляем необходимые нам значения и нажимаем на кнопку "Выполнить".

Так же здесь можно запустить алгоритм удаления невидимых линий, активировав checkbox "Раскрасить фигуру".

Чтобы применить освещение, активируем checkbox "Осветить фигуру". Координаты источника света и значения коэффициентов указываются ниже.

Для отображения перспективной проекции, необходимо переключить radiobutton "перспективный вид", и выставить необходимые параметры.

Рис. 6.3. Освещение

 

 

Рис. 6.4. Перспективный вид

Следующая вкладка позволяет отображать различные виды проекций.

Рис. 6.5. Прямоугольные проекции

 

Рис. 6.6. Аксонометрическая проекция

 

Рис. 6.7. Косоугольная проекция


 

Литература

  1. Д.Роджерс, Алгоритмические основы машинной графики. Москва «Мир» 1989
  2. Д.Роджерс, Дж.Адамс Математические основы машинной графики. Москва «Мир» 2001
  3. Н.Н.Голованов Геометрическое моделирование. Москва Издательство «Физматлит» 2002

 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...