JSFiddle - React, Tailwind, and code Playground

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r79/three.min.js"></script>
<script src="https://cdn.rawgit.com/mrdoob/three.js/dev/examples/js/renderers/Projector.js"></script>
<script src="https://cdn.rawgit.com/mrdoob/three.js/dev/examples/js/renderers/CanvasRenderer.js"></script>

JavaScript

var camera, scene, renderer, geometry, material, mesh;

init();
animate();

function init() {

    scene = new THREE.Scene();

    camera = new THREE.PerspectiveCamera(50, window.innerWidth / window.innerHeight, 1, 10000);
    camera.position.z = 500;
    scene.add(camera);

    geometry = new THREE.CubeGeometry(200, 200, 200);
    material = new THREE.MeshNormalMaterial();

    mesh = new THREE.Mesh(geometry, material);
    scene.add(mesh);

    renderer = new THREE.CanvasRenderer({
      antialias: true
    });
    
    renderer.setSize(500, 500);

    document.body.appendChild(renderer.domElement);

}

function animate() {

    requestAnimationFrame(animate);
    render();

}

var frames = 0
var isSmall = false

function render(time) {

    mesh.rotation.x += 0.01;
    mesh.rotation.y += 0.02;
    
    if (frames % 100 === 0) {
        isSmall = !isSmall
        renderer.setPixelRatio(isSmall ? 0.2 : 1);
        renderer.setSize(500,500);
    }

    renderer.render(scene, camera);
    
    frames ++;

}