Files
sunrise/scripts/prepare-rock-study.ts
T

20 lines
1.5 KiB
TypeScript

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();