body {
  margin: 0;
}
var scene = new THREE.Scene();
var camera = new THREE.PerspectiveCamera(60, innerWidth / innerHeight, 1, 1000);
camera.position.set(0, 0, 10);
var renderer = new THREE.WebGLRenderer({
  antialias: true
});
renderer.setSize(innerWidth, innerHeight);
document.body.appendChild(renderer.domElement);

var controls = new THREE.OrbitControls(camera, renderer.domElement);

var tex = new THREE.TextureLoader().load(
  "https://threejs.org/examples/textures/uv_grid_opengl.jpg"
);

var sphereGeom = new THREE.SphereBufferGeometry(1, 32, 32, 5);

// сфера

var innerSphere = new THREE.Mesh(
  sphereGeom,
  new THREE.MeshBasicMaterial({
    map: tex
  })
);
innerSphere.scale.setScalar(3);
scene.add(innerSphere);
window.addEventListener("mousemove", rotating, false);
var clock = new THREE.Clock();
// крутить сферу

let rotationFactorY = 0;
let rotationFactorX = 0;
const maxRotationSpeed = 0.1;

function rotating(e) {
  rotationFactorY = 2 * (e.clientX - window.innerWidth / 2) / window.innerWidth;
  rotationFactorX = 2 * (e.clientY - window.innerHeight / 2) / window.innerHeight;
}

renderer.setAnimationLoop(() => {
  innerSphere.rotation.y += maxRotationSpeed * rotationFactorY;
  // innerSphere.rotation.x += maxRotationSpeed * rotationFactorX;
  renderer.render(scene, camera);
});

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

  1. https://threejs.org/build/three.min.js
  2. https://threejs.org/examples/js/controls/OrbitControls.js