MASM32 и OpenGL
Это не так сложно, как на самом деле

Нормали к поверхности

В примере с белым кубом все его грани были освещены одинаково интенсивно вне зависимости от ориентации относительно источника света. В природе так не бывает. OpenGL с легкостью рассчитает интенсивность освещенности, но для этого ей необходимо сообщить ориентацию поверхности в пространстве. Это делается с помощью вектора, перпендикулярного к поверхности, который называют нормалью. Если известны координаты нормали X, Y, Z (в данном примере это числа с плавающей запятой - float), нормаль к поверхности задается выражением:

invoke glNormal3f, X, Y, Z

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

Если задан вектор а

и вектор b

их векторное произведение ab в правосторонней системе координат ab можно вычислить по формуле

Начало координат при этом должно находится в точке пересечения всех трех векторов, если точка пересечения имеет координаты

то при вычислениях в формулу произведения необходимо подставлять разности вида X1 - X0, Y1 - Y0 и т.д. В случае криволинейной поверхности нормаль можно построить к плоскости, касательной к этой поверхности.

©   Короленко М.В., 2011       
Перепечатка материалов возможна только после согласования с автором при условии обязательной ссылки на сайт