29 lines
858 B
TypeScript
29 lines
858 B
TypeScript
import type { DrawGroup } from "./Material"
|
|
import type { Vec3 } from "../math/Vec3"
|
|
|
|
export type Bounds3 = {
|
|
minX: number
|
|
minY: number
|
|
minZ: number
|
|
maxX: number
|
|
maxY: number
|
|
maxZ: number
|
|
}
|
|
|
|
/** One cullable section of static world geometry with two engine-supported LODs. */
|
|
export type Chunk = Bounds3 & {
|
|
readonly near: readonly DrawGroup[]
|
|
readonly far: readonly DrawGroup[]
|
|
}
|
|
|
|
export namespace Chunk {
|
|
export function isFar(chunk: Chunk, eye: Vec3, lodDistance: number): boolean {
|
|
if (!(lodDistance < Infinity)) {
|
|
return false
|
|
}
|
|
const dx = eye.x - Math.max(chunk.minX, Math.min(chunk.maxX, eye.x))
|
|
const dy = eye.y - Math.max(chunk.minY, Math.min(chunk.maxY, eye.y))
|
|
const dz = eye.z - Math.max(chunk.minZ, Math.min(chunk.maxZ, eye.z))
|
|
return dx * dx + dy * dy + dz * dz > lodDistance * lodDistance
|
|
}
|
|
}
|