на начало
На главную страницу
Форум   

Статья :: Выбор способа вычисления нормалей

 

Выбор способа вычисления нормалей

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

//====== Флаг способа вычисления нормалей

bool gbSmooth = false;

которая будет помнить текущий способ вычисления нормалей, и сделаем так, чтобы каждое нажатие клавиши N инвертировало эту переменную и способ вычисления нормали. Введите в функцию main реакцию на нажатие клавиши N, вставив строку

auxKeyFunc(AUX_n, KeyN);

Реализацию функции обработки вставьте до функции main:

void _stdcall KeyN()

{

//====== Изменяем способ вычисления нормалей

gbSmooth = !gbSmooth;

11====== Заново создаем список команд

DrawScene(); }

Введите новую версию функции setTria, которая учитывает выбранный способ вычисления нормалей:

void setTria(double *vl, double *v2, double *v3)

{

glBegin(GLJTRIANGLES);

//====== Если выбран способ точного вычисления нормали

if (!gbSmooth)

{

//====== Правая тройка векторов

double dl[3], d2[3], norm[3];

//====== Вычисляем координаты векторов

//====== двух сторон треугольника

for (int j = 0; j.< 3; j++)

{

dl[j] = vl[j] - v2[j); d2[j] = v2[j] - v3[j];

}

//====== Вычисляем нормаль к плоскости

//====== треугольника со сторонами dl и d2

getNorm(dl, d2, norm);

glNormalSdv(norm);

glVertex3dv(vl);

glVertex3dv(v2);

glVertex3dv(v3);

}

else

{

//=== Неточное (приближенное) задание нормали

glNorma!3dv(vl);

glVertexSdv(vl);

glNorma!3dv(v2);

glVertex3dv(v2);

glNorraalSdv(v3);

glVertex-3dv(v3);

}

glEnd ();

}

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

 

Выбор способа вычисления нормалей

страницы в данном разделе 
Урок 6. Графика OpenGL Графика OpenGL
Обзор возможностей библиотеки OpenGL Подключаемые библиотеки
Ограничения Microsoft Примитивы OpenGL
OpenGL — автомат с конечным числом состояний Конвейер передачи OpenGL
Основные этапы Анимация
Другие функции OpenGL Контекст передачи изображения
Подготовка окна Создание консольного проекта
Штриховка линий Штриховка полигонов
Как убирать внутренние линии Перспективная проекция
Вносим свет Интерактивное управление положением и ориентацией
Двойная буферизация Использование списков
Интерполяция цвета Строим икосаэдр
Как создать сферу Выбор способа вычисления нормалей
Рекурсивное деление Массивы вершин, нормалей и цветов
Создание сферы >  


Содержание сайта (выборка)
Apache
Протоколы TCP/IP (принципы, протоколы и архитектура)



PHP, PELR, JSP
PHP
JavaServer Pages (JSP)

Базы данных
Основы mysql
СУБД INFORMIX
СУБД POSTGRES
Основы проектирования реляционных баз данных

HTML, javascript
Спецификация HTML 4.01
Каскадные Таблицы Стилей, Уровень 2
Клиентский JavaScript. Справочник.
JavaScript руководство пользователя
Серверный JavaScript 1.4. Руководство по Использованию.

Паскаль, C, C++, C#
GCC (примеры)
FAQ Валентинa Озеровa DELPHI
C



 
© faq.pp.ru, справочник программиста