12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- import * as THREE from 'three';
- import * as BufferGeometryUtils from '../../examples/jsm/utils/BufferGeometryUtils.js';
- import {threejsLessonUtils} from './threejs-lesson-utils.js';
- {
- const darkMatcher = window.matchMedia('(prefers-color-scheme: dark)');
- const isDarkMode = darkMatcher.matches;
- const darkColors = {
- wire: '#DDD',
- };
- const lightColors = {
- wire: '#000',
- };
- const colors = isDarkMode ? darkColors : lightColors;
- threejsLessonUtils.addDiagrams({
- mergedCubes: {
- create() {
- const geometries = [];
- const width = 3;
- const height = 2;
- const depth = 2;
- for (let y = 0; y < height; ++y) {
- for (let z = 0; z < depth; ++z) {
- for (let x = 0; x < width; ++x) {
- const geometry = new THREE.BoxGeometry(1, 1, 1);
- geometry.applyMatrix4((new THREE.Matrix4()).makeTranslation(x, y, z));
- geometries.push(geometry);
- }
- }
- }
- const mergedGeometry = BufferGeometryUtils.mergeBufferGeometries(geometries, false);
- const material = new THREE.MeshBasicMaterial({
- color: colors.wire,
- wireframe: true,
- });
- const mesh = new THREE.Mesh(mergedGeometry, material);
- mesh.position.set(
- 0.5 - width / 2,
- 0.5 - height / 2,
- 0.5 - depth / 2);
- const base = new THREE.Object3D();
- base.add(mesh);
- base.scale.setScalar(3.5);
- return base;
- },
- },
- culledCubes: {
- create() {
- const geometry = new THREE.BoxGeometry(3, 2, 2, 3, 2, 2);
- const material = new THREE.MeshBasicMaterial({
- color: colors.wire,
- wireframe: true,
- });
- const mesh = new THREE.Mesh(geometry, material);
- mesh.scale.setScalar(3.5);
- return mesh;
- },
- },
- });
- }
|