преобразование масштабирования - процедурой void gIScale (fd}(TYPE х, TYPE у, TYPE z); Если указано несколько преобразований, то текущая матрица в результате будет последовательно умножена на соответствующие матрицы.

Рассмотрим, каким образом можно построить изображение руки робота (рис. 12.3).

Рука состоит из двух боковых опор и трех последовательно сочлененных фрагментов.

Для построения этого объекта воспользуемся приведенной ранее процедурой drawBox.

Ы\ II File drawarm.cpp void drawArm () {

glClear ( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
gIMatrixMode ( GL_MODELVIEW ); gILoadldentity (); gITranslatef ( 0.0, 0.0, -64.0 ); gIRotatef ( 30.0, 1.0, 0.0,0.0 );
gIRotatef ( 30.0, 0.0, 1.0, 0.0 ); // draw the block anchoring the arm
drawBox (1.0, 3.0, -2.0, 2.0, -2.0, 2.0 ); drawBox (-3.0, -1.0, -2.0, 2.0, -2.0, 2.0 );
// rotate the coordinate system and draw the arm's base member gIRotatef ((GLfloat) angle, 1.0, 0.0, 0.0 ); drawBox (-1.0, 1.0, -1.0, 1.0, -5.0, 5.0 );
// translate the coordinate system to the end of base member, rotate it,

// and draw the second member gITranslatef ( 0.0, 0.0, -5.0 ); gIRotatef (-(GLfloat) angle / 2.0, 1.0, 0.0, 0.0 ); drawBox (И.О. 1.0,-1.0, 1.0, -10.0,0.0-);

// translate and rotate coordinate system again and draw arm's
// third member gITranslatef ( 0.0, 0.0, -5.0 ); gIRotatef (-(GLfloat) angle / 2.0, 1.0, 0.0, 0.0 ); drawBox (-1.0, 1.0, -1.0, 1.0, -10.0, 0.0 );
}

Сначала инициализируется моделирующая матрица и локальная система координат переносится в точку, которая будет служит опорной точкой для руки: Компьютерная графика. Полигональные модели

gIMatrixMode ( GL_MODELVIEW ); gILoadldentity (); gITranslatef ( 0.0, 0.0, -64.0 ); gIRotatef ( 30.0, 1.0, 0.0, 0.0 ); gIRotatef ( 30.0, 0.0, 1.0, 0.0 );

Далее рисуются два опорных блока, по обе стороны от опорной точки: drawBox ( 1.0, 3.0, -2.0, 2.0, -2.0, 2.0 ); drawBox (-3.0, -1.0, -2.0, 2.0, -2.0, 2.0 ); Осуществляется поворот локальной системы координат на угол angle вокруг оси Ох и рисуется первый блок руки: і


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