import * as THREE from 'three'; import {threejsLessonUtils} from './threejs-lesson-utils.js'; { function addShape(color, geometry) { const material = new THREE.MeshPhongMaterial({color}); return new THREE.Mesh(geometry, material); } threejsLessonUtils.addDiagrams({ shapeCube: { create() { const width = 8; const height = 8; const depth = 8; return addShape('hsl(150,100%,40%)', new THREE.BoxGeometry(width, height, depth)); }, }, shapeCone: { create() { const radius = 6; const height = 8; const segments = 24; return addShape('hsl(160,100%,40%)', new THREE.ConeGeometry(radius, height, segments)); }, }, shapeCylinder: { create() { const radiusTop = 4; const radiusBottom = 4; const height = 8; const radialSegments = 24; return addShape('hsl(170,100%,40%)', new THREE.CylinderGeometry(radiusTop, radiusBottom, height, radialSegments)); }, }, shapeSphere: { create() { const radius = 5; const widthSegments = 24; const heightSegments = 16; return addShape('hsl(180,100%,40%)', new THREE.SphereGeometry(radius, widthSegments, heightSegments)); }, }, shapeFrustum: { create() { const width = 8; const height = 8; const depth = 8; const geometry = new THREE.BoxGeometry(width, height, depth); const perspMat = new THREE.Matrix4(); perspMat.makePerspective(-3, 3, -3, 3, 4, 12); const inMat = new THREE.Matrix4(); inMat.makeTranslation(0, 0, 8); const mat = new THREE.Matrix4(); mat.multiply(perspMat); mat.multiply(inMat); geometry.applyMatrix4(mat); geometry.computeBoundingBox(); geometry.center(); geometry.scale(3, 3, 3); geometry.rotateY(Math.PI); geometry.computeVertexNormals(); return addShape('hsl(190,100%,40%)', geometry); }, }, }); }