Эр Эр п=-х-. ди Эу
Рис. 6.20. Касательная плоскость к сферической поверхности Подставляя в это уравнение параметрические функции сферической поверхности, получим"images/tmpB6CA-259.png">
Поскольку нас интересует только направление вектора нормали, то для сферы единичного радиуса получим п = р.
В разделе 6.9 этот результат будет использован при закрашивании сферы, аппроксимированной многоугольниками.
В графической системе основным типом примитива, с которым выполняются все вычисления, являются вершины. Таким образом, и вектор нормали следует формировать на основании набора вершин, достаточно близких к той точке, нормаль в которой нас интересует. В рамках конвейерной архитектуры графических систем организовать такое вычисление довольно сложно, поскольку по "конвейеру" точки следуют последовательно одна за другой. Поэтому в большинстве графических систем программисту приходится самостоятельно организовывать вычисление векторов нормалей в прикладной программе.
Работая с системой OpenGL, можно связать нормаль с некоторой вершиной с помощью пары функций:
glNormal3f(nx, ny, nz); glNormal3fv(pointer_to_normal);
Аргументы функции glNormal3f ( ) - компоненты вычисленного раньше вектора нормали, а функция glNormal3fv( ) использует в качестве аргумента указатель на массив компонентов уже сформированного вектора.
Нормали в OpenGL являются переменными режима. Если определить нормаль перед тем, как задавать новые вершины с помощью glVertex( ), то эта нормаль будет связана со всеми вершинами, сформированными далее по ходу выполнения программы. Но напомню еще раз, проблему вычисления нормали должен решать прикладной программист.
6.4.2. Угол отражения Определив нормаль к поверхности в анализируемой точке и зная положение источника света, можно вычислить и направление идеально отраженного луча. В идеальном зеркале выполняется закон: угол падения равен углу отражения. Угол падения (angle of incidence) измеряется между нормалью и направлением на источник света (предполагается точечный источник, хотя для отдельного луча это и не принципиально), а угол отражения (angle of reflection) измеряется между нормалью и отраженным лучом (рис. 6.21).