Рассмотрим, каким образом можно построить изображение руки робота, представленное на рис. 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 вокруг оси Ох и рисуется первый блок руки.


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