-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathtriangulate-grid-delaunay.ts
More file actions
32 lines (26 loc) · 1 KB
/
triangulate-grid-delaunay.ts
File metadata and controls
32 lines (26 loc) · 1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import { Delatin } from './delatin'
/**
* Triangulate an elevation grid using Delaunay triangulation
*/
export function triangulateGridDelaunay(grid: Float32Array, columns: number, scaleX = 1, scaleY = 1, nullValue: number = -1, maxError: number = 5) {
const width = columns
const height = grid.length / width
console.time('delatin')
const d = new Delatin(grid, width, nullValue)
d.run(maxError)
d.removeInvalidTriangles()
console.timeEnd('delatin')
const positions = new Float32Array(d.coords.length * 1.5)
const uvs = new Float32Array(d.coords.length)
for (let i = 0, j = 0; i < d.coords.length; i += 2) {
uvs[i] = (d.coords[i] / (width - 1))
uvs[i + 1] = 1 - (d.coords[i + 1] / (height - 1))
j = i * 1.5
positions[j] = d.coords[i] * scaleX
positions[j + 1] = d.heightAt(d.coords[i], d.coords[i + 1])
positions[j + 2] = d.coords[i + 1] * scaleY
}
const indices = new Uint32Array(d.triangles)
console.log(d.triangles.length / 3)
return {positions, uvs, indices }
}