First commit
This commit is contained in:
commit
7fe5d03a09
33 changed files with 6524 additions and 0 deletions
77
app/three/utils/build-meshes.ts
Normal file
77
app/three/utils/build-meshes.ts
Normal file
|
@ -0,0 +1,77 @@
|
|||
import {
|
||||
BufferAttribute,
|
||||
BufferGeometry,
|
||||
DoubleSide,
|
||||
Group,
|
||||
Mesh,
|
||||
MeshBasicMaterial,
|
||||
MeshStandardMaterial,
|
||||
} from "three";
|
||||
|
||||
import { fetchTriangleIndices } from "./fetch-triangle-indices";
|
||||
import { fetchVertices } from "./fetch-vertices";
|
||||
import { TRIANGLE_INDICES_URL, VERTICES_URL } from "../config";
|
||||
|
||||
interface MappedFeature {
|
||||
featuregeom_id: number;
|
||||
name: string;
|
||||
geologicdescription: { "feature type": string; citation: string | null };
|
||||
preview: { legend_color: string; legend_text: string };
|
||||
}
|
||||
|
||||
async function buildMesh(layerData: MappedFeature) {
|
||||
const color = `#${layerData.preview.legend_color}`;
|
||||
const name = layerData.preview.legend_text;
|
||||
const geomId = layerData.featuregeom_id.toString();
|
||||
|
||||
const geometry = new BufferGeometry();
|
||||
const vertices = await fetchVertices(VERTICES_URL, geomId);
|
||||
|
||||
const positions = new BufferAttribute(vertices, 3);
|
||||
geometry.setAttribute("position", positions);
|
||||
|
||||
const indexArray = await fetchTriangleIndices(TRIANGLE_INDICES_URL, geomId);
|
||||
const indices = new BufferAttribute(indexArray, 1);
|
||||
|
||||
geometry.setIndex(indices);
|
||||
geometry.scale(1, 1, 1);
|
||||
geometry.computeBoundingSphere();
|
||||
geometry.computeVertexNormals();
|
||||
geometry.computeBoundingBox();
|
||||
|
||||
const material = new MeshStandardMaterial(
|
||||
{
|
||||
color: color,
|
||||
metalness: 0.1,
|
||||
roughness: 0.75,
|
||||
flatShading: true,
|
||||
side: DoubleSide,
|
||||
// wireframe: false,
|
||||
}
|
||||
// this.uniforms.clipping
|
||||
);
|
||||
|
||||
const mesh = new Mesh(geometry, material);
|
||||
mesh.name = name;
|
||||
mesh.userData.layerId = geomId;
|
||||
mesh.castShadow = true;
|
||||
mesh.receiveShadow = true;
|
||||
|
||||
// modelNode should be a THREE.Group object where all the model data gets added to
|
||||
// in the original code modelNode is a direct reference to a THREE.Scene
|
||||
// if (modelNode) {
|
||||
// modelNode.add(mesh);
|
||||
// }
|
||||
return mesh;
|
||||
}
|
||||
|
||||
export async function buildMeshes(mappedFeatures: MappedFeature[]) {
|
||||
const meshes = [];
|
||||
for (let i = 0; i < mappedFeatures.length; i++) {
|
||||
const layerData = mappedFeatures[i];
|
||||
const mesh = await buildMesh(layerData);
|
||||
meshes.push(mesh);
|
||||
}
|
||||
|
||||
return meshes;
|
||||
}
|
Loading…
Add table
editor.link_modal.header
Reference in a new issue