void glNormal3{b s i d f) ( TYPE nx, TYPE ny, TYPE nz ); void glNormal3{b s i d f}v ( const TYPE * v );

В версиях с суффиксом b, s или i значения аргументов масштабируются в отрезок [-1, 1].

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

void drawBox ( GLfloat xl, GLfloat x2, GLfloat yl, GLfloat yl, GLfloat zl, GLfloat z2 )
{
glBegin ( GL_POLYGON ); // front face
glNormal3f ( 0.0, 0.0, 1.0 ) ;
glVertex3f ( xl, yl, z2 );
glVertex3f ( x2, yl, z2 );
glVertex3f ( x2, y2, z2 ) ;
glVertex3f ( xl, y2, z2 ); glEnd ();
glBegin ( GL_POLYGON ); // back face
glNormal3f (0.0,0.0,-1.0);
glVertex3f ( x2, yl, zl );
glVertex3f ( xl, yl, zl );
glVertex3f ( xl, y2, zl );
glVertex3f ( x2, y2, zl ) ; glEnd ();
glBegin ( GL_POLYGON ); // left face
glNormal3f ( -1.0, 0.0, 0.0 );
glVertex3f ( xl, yl, zl );
glVertex3f ( xl, yl, z2 );
glVertex3f ( xl, y2, z2 );
glVertex3f ( xl, y2, zl ); glEnd ();

Основы библиотеки OpenGL

glBegin ( GL.POLYGON ); // right face
glNormal3f (1.0, 0.0, 0.0);
glVertex3f ( x2, yl, z2 );
glVertex3f ( x2, yl, zl ) ; glVertex3f ( x2, y2, zl );
glVertex3f ( x2, y2, z2 ); glEnd () ;
glBegin ( GL_POLYGON ); // top face
glNormal3f ( 0.0, 1.0, 0.0 ) ;
glVertex3f ( xl, y2, z2 ) ;
glVertex3f ( x2, y2, z2 ) ;
glVertex3f ( x2, y2, zl );
glVertex3f ( xl, y2, zl ); glEnd ();
glBegin ( GL_POLYGON ); // bottom face
glNormal3f ( 0.0, -1.0, 0.0 ) ;
glVertex3f ( x2, yl, z2 );
glVertex3f ( xl, yl, z2 );
glVertex3f ( xl, yl, zl );
glVertex3f ( x2, yl, zl ); glEnd ();
}

Преобразование объектов в пространстве. Камера В процессе построения изображения координаты вершин подвергаются следующим преобразованиям (рис. 4.4):

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

Рис. 4.4

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

По умолчанию камера изначально находится в начале координат и направлена вдоль отрицательного направления оси Ог.


⇐ Предыдущая| |Следующая ⇒