Рассмотрим, каким образом можно построить изображение руки робота, представленное на рис. 4.5. Рука состоит из двух боковых опор и трех последовательно сочлененных фрагментов.
Для построения этого объекта воспользуемся процедурой drawBoX, приведенной ранее.
void drawArm () {
glClear ( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glMatrixMode ( GL_MODELVIEW );
glLoadldentity ();
glTranslatef ( 0.0, 0.0, -64.0 ) ;
glRotatef ( 3&.0, 1.0, 0.0, 0.0 );
glRotatef ( 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 glRotatef ( (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 glTranslatef ( 0.0, 0.0, -5.0 );
glRotatef ( -(GLfloat) angle / 2.0, 1.0, 0.0, 0.0 );
drawBox ( -1.0, 1.0, -1.0, 1.0, -10.0, 0.0 );
Рис. 4.5
II translate and rotate coordinate // system again and draw arm's // third member glTranslatef ( 0.0, 0.0, -5.0 );
glRotatef ( -(GLfloat) angle / 2.0, 1.0, 0.0, 0.0 );
drawBox ( -1.0, 1.0, -1.0, 1.0, -10.0, 0.0 ) ;
}
Для начала инициализируется моделирующая матрица и локальная система координат переносится в точку, которая будет служит опорной Точкой для руки.
glMatrixMode ( GL_MODELVIEW ); glLoadldentity О;
glTranslatef ( 0.0, 0.0, -64.0 ); ' glRotatef ( 30.0, 1.0, 0.0, 0.0 );
glRotatef ( 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 вокруг оси Ох и рисуется первый блок руки.