Вам просто нужно убедиться, что перевод в точку около внешнего круга "красного бита" выполняется после применения вращения.
В "классическом" непосредственном OpenGL (который яне обязательно относится к вашему коду), это будет что-то вроде:
const float main_cog_radius = 1.f;
const float crank_radius = 0.08f;
glPushMatrix();
glRotatef(main_cog_angle, 0.f, 0.f, 1.f);
draw_main_cog(main_cog_radius);
glTranslatef(main_cog_radius - crank_radius, 0.f, 0.f);
draw_crank(crank_radius);
glPopMatrix();
Предполагается, что ось, проходящая через центр главного винта, равна (0,0,1).