import {readFileSync,writeFileSync} from 'node:fs'; import {createTerrainGeometry,terrainGeometryHeightAt} from '../src/scene/terrainGeometry.ts'; import {applySummitTerrain} from '../src/scene/summitTerrain.ts'; import {structurePosition} from '../src/scene/structures.ts'; import {STRUCTURES} from '../src/constants/structures.ts'; import {SUMMIT_TERRAIN} from '../src/constants/summitTerrain.ts'; const meta=JSON.parse(readFileSync('public/terrain/gwanaksan.json','utf8')); const bytes=readFileSync('public/terrain/gwanaksan.f32'); const terrain=createTerrainGeometry(meta,new Float32Array(bytes.buffer,bytes.byteOffset,bytes.byteLength/4),true); applySummitTerrain(terrain,meta); const radar=structurePosition(STRUCTURES.radar.latitude,STRUCTURES.radar.longitude,meta.origin); radar.y=Math.max(...[-4,0,4].flatMap(x=>[-4,0,4].map(z=>terrainGeometryHeightAt(terrain,radar.x+x,radar.z+z))))+.2; const eye=structurePosition(SUMMIT_TERRAIN.start.latitude,SUMMIT_TERRAIN.start.longitude,meta.origin); eye.y=terrainGeometryHeightAt(terrain,eye.x,eye.z)+1.7; const vertices=[]; for(let north=-20;north<=125;north+=2.5)for(let east=-55;east<=65;east+=2.5)vertices.push([east,north,terrainGeometryHeightAt(terrain,radar.x+east,radar.z-north)-radar.y]); writeFileSync('assets/summit/blender-rock-study/context.json',JSON.stringify({radar:radar.toArray(),eye:[eye.x-radar.x,radar.z-eye.z,eye.y-radar.y],columns:49,rows:59,vertices})); console.log({radar:radar.toArray(),eye:eye.toArray(),samples:vertices.length}); terrain.dispose();