Сфера расположена в (2.5, 0.6):
glTranslatef(2.5, .6, 0.0);
Коробка расположена в (3.2, 0.55):
glTranslatef(3.2, .55, 0.0);
Центр сферы - это ось. Вектор, образующий точку поворота относительно начала поля:
(3.2, 0.55) - (2.5, 0.6) = (0.75, -0.05)
Если вы хотите повернуть объект вокруг точки поворота, вы должны:
Переведите объект таким образом, чтобы стержень находился в начале координат (0, 0, 0). Это вектор от оси поворота к началу поля (0,75, -0,05).
glTranslatef(0.75, -0.05f, 0.0f);
Поворот объекта.
glRotatef((GLfloat)rightHandAngle, 0.0, 0.0, 1.0);
Переведите прямоугольник таким образом, чтобы ось вернулась в исходное положение. Это отрицательный вектор от центра к началу координат (-0,75, 0,05).
glTranslatef(-0.7, 0.05f, 0.0f);
См. Также Как использоватьОпорная точка в преобразованиях
Поскольку такие операции, как glTranslate
и glRotate
определяют матрицу и умножают текущую матрицу на матрицу NES, эти операциидолжны быть выполнены в обратном порядке.
![](https://i.stack.imgur.com/AyGSb.gif)
//right arm
glLoadIdentity();
glTranslatef(0.0,0.0,-12.0);
glRotatef(tippangle, 1,0,0);
glRotatef(viewangle, 0,1,0);
glTranslatef(3.2, .55, 0.0);
glTranslatef(-0.7, 0.05f, 0.0f);
glRotatef((GLfloat)rightHandAngle, 0.0, 0.0, 1.0);
glTranslatef(0.75, -0.05f, 0.0f);
glScalef(0.5,.12,0.1);
drawBox();
См. также Перевод OpenGL до и после вращения .