perf: faster still
This commit is contained in:
parent
ef5029da1d
commit
67cd54fe33
8 changed files with 280 additions and 203 deletions
31
app/level.ts
31
app/level.ts
|
|
@ -1,6 +1,6 @@
|
|||
import { Color } from "../engine/render/Color"
|
||||
import type { CloudLayer, SkyConfig } from "../engine/render/Sky"
|
||||
import type { Mesh } from "../engine/scene/Mesh"
|
||||
import { STRIDE, type Mesh } from "../engine/scene/Mesh"
|
||||
import { Boulder } from "../engine/scene/Boulder"
|
||||
import { Terrain } from "../engine/scene/Terrain"
|
||||
import { Tree } from "../engine/scene/Tree"
|
||||
|
|
@ -231,13 +231,17 @@ function bounds(meshes: Mesh[]): Pick<Chunk, "minX" | "minY" | "minZ" | "maxX" |
|
|||
let maxY = -Infinity
|
||||
let maxZ = -Infinity
|
||||
for (const m of meshes) {
|
||||
for (const v of m.vertices) {
|
||||
minX = Math.min(minX, v.pos.x)
|
||||
minY = Math.min(minY, v.pos.y)
|
||||
minZ = Math.min(minZ, v.pos.z)
|
||||
maxX = Math.max(maxX, v.pos.x)
|
||||
maxY = Math.max(maxY, v.pos.y)
|
||||
maxZ = Math.max(maxZ, v.pos.z)
|
||||
const verts = m.verts
|
||||
for (let i = 0; i < verts.length; i += STRIDE) {
|
||||
const x = verts[i]
|
||||
const y = verts[i + 1]
|
||||
const z = verts[i + 2]
|
||||
minX = Math.min(minX, x)
|
||||
minY = Math.min(minY, y)
|
||||
minZ = Math.min(minZ, z)
|
||||
maxX = Math.max(maxX, x)
|
||||
maxY = Math.max(maxY, y)
|
||||
maxZ = Math.max(maxZ, z)
|
||||
}
|
||||
}
|
||||
return maxX < minX ? null : { minX, minY, minZ, maxX, maxY, maxZ }
|
||||
|
|
@ -310,7 +314,7 @@ function mulberry(seed: number): () => number {
|
|||
}
|
||||
|
||||
function mesh(): Mesh {
|
||||
return { vertices: [], indices: [] }
|
||||
return { verts: [], indices: [] }
|
||||
}
|
||||
|
||||
/** A perimeter wall collider: blocks from the sides, and `standable` so you can
|
||||
|
|
@ -324,13 +328,8 @@ function wall(minX: number, maxX: number, minZ: number, maxZ: number): Aabb {
|
|||
* needed -- texturing is perspective-correct, so a single quad looks right at
|
||||
* any size. */
|
||||
function quad(m: Mesh, a: Corner, b: Corner, c: Corner, d: Corner, us: number, vs: number): void {
|
||||
const base = m.vertices.length
|
||||
m.vertices.push(
|
||||
{ pos: { x: a[0], y: a[1], z: a[2] }, uv: { x: 0, y: 0 } },
|
||||
{ pos: { x: b[0], y: b[1], z: b[2] }, uv: { x: us, y: 0 } },
|
||||
{ pos: { x: c[0], y: c[1], z: c[2] }, uv: { x: us, y: vs } },
|
||||
{ pos: { x: d[0], y: d[1], z: d[2] }, uv: { x: 0, y: vs } },
|
||||
)
|
||||
const base = m.verts.length / STRIDE
|
||||
m.verts.push(a[0], a[1], a[2], 0, 0, b[0], b[1], b[2], us, 0, c[0], c[1], c[2], us, vs, d[0], d[1], d[2], 0, vs)
|
||||
m.indices.push(base, base + 1, base + 2, base, base + 2, base + 3)
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue