import * as THREE from 'three'; import { threejsLessonUtils } from './threejs-lesson-utils.js'; { const loader = new THREE.TextureLoader(); const texture = loader.load( '/manual/examples/resources/images/star-light.png' ); texture.wrapS = THREE.RepeatWrapping; texture.wrapT = THREE.RepeatWrapping; texture.repeat.set( 3, 1 ); function makeMesh( geometry ) { const material = new THREE.MeshPhongMaterial( { color: 'hsl(300,50%,50%)', side: THREE.DoubleSide, map: texture, } ); return new THREE.Mesh( geometry, material ); } threejsLessonUtils.addDiagrams( { geometryCylinder: { create() { return new THREE.Object3D(); }, }, bufferGeometryCylinder: { create() { const numSegments = 24; const positions = []; const uvs = []; for ( let s = 0; s <= numSegments; ++ s ) { const u = s / numSegments; const a = u * Math.PI * 2; const x = Math.sin( a ); const z = Math.cos( a ); positions.push( x, - 1, z ); positions.push( x, 1, z ); uvs.push( u, 0 ); uvs.push( u, 1 ); } const indices = []; for ( let s = 0; s < numSegments; ++ s ) { const ndx = s * 2; indices.push( ndx, ndx + 2, ndx + 1, ndx + 1, ndx + 2, ndx + 3, ); } const positionNumComponents = 3; const uvNumComponents = 2; const geometry = new THREE.BufferGeometry(); geometry.setAttribute( 'position', new THREE.BufferAttribute( new Float32Array( positions ), positionNumComponents ) ); geometry.setAttribute( 'uv', new THREE.BufferAttribute( new Float32Array( uvs ), uvNumComponents ) ); geometry.setIndex( indices ); geometry.computeVertexNormals(); geometry.scale( 5, 5, 5 ); return makeMesh( geometry ); }, }, } ); }