import type { Scene } from "../scene";
import { Vector3 } from "../Maths/math.vector";
import { Mesh } from "../Meshes/mesh";
/**
 * Mesh representing the ground
 */
export declare class GroundMesh extends Mesh {
    /** If octree should be generated */
    generateOctree: boolean;
    private _heightQuads;
    /** @internal */
    _subdivisionsX: number;
    /** @internal */
    _subdivisionsY: number;
    /** @internal */
    _width: number;
    /** @internal */
    _height: number;
    /** @internal */
    _minX: number;
    /** @internal */
    _maxX: number;
    /** @internal */
    _minZ: number;
    /** @internal */
    _maxZ: number;
    constructor(name: string, scene?: Scene);
    /**
     * "GroundMesh"
     * @returns "GroundMesh"
     */
    getClassName(): string;
    /**
     * The minimum of x and y subdivisions
     */
    get subdivisions(): number;
    /**
     * X subdivisions
     */
    get subdivisionsX(): number;
    /**
     * Y subdivisions
     */
    get subdivisionsY(): number;
    /**
     * This function will divide the mesh into submeshes and update an octree to help to select the right submeshes
     * for rendering, picking and collision computations. Please note that you must have a decent number of submeshes
     * to get performance improvements when using an octree.
     * @param chunksCount the number of submeshes the mesh will be divided into
     * @param octreeBlocksSize the maximum size of the octree blocks (Default: 32)
     */
    optimize(chunksCount: number, octreeBlocksSize?: number): void;
    /**
     * Returns a height (y) value in the World system :
     * the ground altitude at the coordinates (x, z) expressed in the World system.
     * @param x x coordinate
     * @param z z coordinate
     * @returns the ground y position if (x, z) are outside the ground surface.
     */
    getHeightAtCoordinates(x: number, z: number): number;
    /**
     * Returns a normalized vector (Vector3) orthogonal to the ground
     * at the ground coordinates (x, z) expressed in the World system.
     * @param x x coordinate
     * @param z z coordinate
     * @returns Vector3(0.0, 1.0, 0.0) if (x, z) are outside the ground surface.
     */
    getNormalAtCoordinates(x: number, z: number): Vector3;
    /**
     * Updates the Vector3 passed a reference with a normalized vector orthogonal to the ground
     * at the ground coordinates (x, z) expressed in the World system.
     * Doesn't update the reference Vector3 if (x, z) are outside the ground surface.
     * @param x x coordinate
     * @param z z coordinate
     * @param ref vector to store the result
     * @returns the GroundMesh.
     */
    getNormalAtCoordinatesToRef(x: number, z: number, ref: Vector3): GroundMesh;
    /**
     * Force the heights to be recomputed for getHeightAtCoordinates() or getNormalAtCoordinates()
     * if the ground has been updated.
     * This can be used in the render loop.
     * @returns the GroundMesh.
     */
    updateCoordinateHeights(): GroundMesh;
    private _getFacetAt;
    private _initHeightQuads;
    private _computeHeightQuads;
    /**
     * Serializes this ground mesh
     * @param serializationObject object to write serialization to
     */
    serialize(serializationObject: any): void;
    /**
     * Parses a serialized ground mesh
     * @param parsedMesh the serialized mesh
     * @param scene the scene to create the ground mesh in
     * @returns the created ground mesh
     */
    static Parse(parsedMesh: any, scene: Scene): GroundMesh;
}
