three.js dev template - module

CSS

body {
	background-color: #000;
	margin: 0px;
	overflow: hidden;
}

JavaScript

// Simple three.js example

import * as THREE from "https://threejs.org/build/three.module.js";

var renderer, scene, camera, controls;

init();
animate();

function init() {

    // renderer
    renderer = new THREE.WebGLRenderer();
    renderer.setSize( window.innerWidth, window.innerHeight );
    renderer.setPixelRatio( window.devicePixelRatio );
    document.body.appendChild( renderer.domElement );

    // scene
    scene = new THREE.Scene();
    
    // camera
    camera = new THREE.PerspectiveCamera( 40, window.innerWidth / window.innerHeight, 1, 10000 );
    camera.position.set( 0, 0, 5 );
		
		var texture = new THREE.TextureLoader().load( 'https://threejs.org/examples/textures/uv_grid_opengl.jpg');

		var nring1=8;
		var nring2=1;

    var geometry = new THREE.RingGeometry( 0.5, 1, nring1, nring2);

		for(var yi=0; yi<nring2; yi++)
		{
			var u0=yi/nring2;
			var u1=(yi+1)/nring2;
			for(var xi=0; xi<nring1; xi++)
			{
				var fi=2*(xi+nring1*yi);
				var v0=xi/nring1;
				var v1=(xi+1)/nring1;
				geometry.faceVertexUvs[0][fi][0].x=u0; geometry.faceVertexUvs[0][fi][0].y=v0;
				geometry.faceVertexUvs[0][fi][1].x=u1; geometry.faceVertexUvs[0][fi][1].y=v0;
				geometry.faceVertexUvs[0][fi][2].x=u0; geometry.faceVertexUvs[0][fi][2].y=v1;
				fi++;
				geometry.faceVertexUvs[0][fi][0].x=u1; geometry.faceVertexUvs[0][fi][0].y=v0;
				geometry.faceVertexUvs[0][fi][1].x=u1; geometry.faceVertexUvs[0][fi][1].y=v1;
				geometry.faceVertexUvs[0][fi][2].x=u0; geometry.faceVertexUvs[0][fi][2].y=v1;
			}
		}
		
    var material = new THREE.MeshBasicMaterial( { map: texture } );
    
    // mesh
    var mesh = new THREE.Mesh( geometry, material );
    scene.add( mesh );
    
}

function animate() {

    requestAnimationFrame( animate );
    renderer.render( scene, camera );

}