threejs-voxel-geometry.js 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. 'use strict';
  2. /* global THREE, threejsLessonUtils */
  3. {
  4. threejsLessonUtils.addDiagrams({
  5. mergedCubes: {
  6. create() {
  7. const geometries = [];
  8. const width = 3;
  9. const height = 2;
  10. const depth = 2;
  11. for (let y = 0; y < height; ++y) {
  12. for (let z = 0; z < depth; ++z) {
  13. for (let x = 0; x < width; ++x) {
  14. const geometry = new THREE.BoxBufferGeometry(1, 1, 1);
  15. geometry.applyMatrix((new THREE.Matrix4()).makeTranslation(x, y, z));
  16. geometries.push(geometry);
  17. }
  18. }
  19. }
  20. const mergedGeometry = THREE.BufferGeometryUtils.mergeBufferGeometries(geometries, false);
  21. const material = new THREE.MeshBasicMaterial({
  22. color: 'black',
  23. wireframe: true,
  24. });
  25. const mesh = new THREE.Mesh(mergedGeometry, material);
  26. mesh.position.set(
  27. 0.5 - width / 2,
  28. 0.5 - height / 2,
  29. 0.5 - depth / 2);
  30. const base = new THREE.Object3D();
  31. base.add(mesh);
  32. base.scale.setScalar(3.5);
  33. return base;
  34. },
  35. },
  36. culledCubes: {
  37. create() {
  38. const geometry = new THREE.BoxBufferGeometry(3, 2, 2, 3, 2, 2);
  39. const material = new THREE.MeshBasicMaterial({
  40. color: 'black',
  41. wireframe: true,
  42. });
  43. const mesh = new THREE.Mesh(geometry, material);
  44. mesh.scale.setScalar(3.5);
  45. return mesh;
  46. },
  47. },
  48. });
  49. }