@tolokoban/tgd
Version:
ToloGameDev library for WebGL2
80 lines • 2.94 kB
TypeScript
import { TgdQuat, TgdVec3, TgdMat4, TgdTransfo, TgdTransfoOptions } from "../math";
import { TgdInterfaceTransformable } from "../interface";
export interface TgdCameraOptions {
near?: number;
/** Can be Infinity for perspective camera (`Number.POSITIVE_INFINITY`) */
far?: number;
name?: string;
zoom?: number;
transfo?: Partial<TgdTransfoOptions> | TgdTransfo;
}
export interface TgdCameraState {
spaceHeightAtTarget: number;
distance: number;
zoom: number;
orientation: TgdQuat;
position: TgdVec3;
}
export declare abstract class TgdCamera implements TgdInterfaceTransformable {
private static incrementalId;
readonly name: string;
readonly transfo: TgdTransfo;
private _screenWidth;
private _screenHeight;
private _screenAspectRatio;
/** Do we need recalculation? */
private _dirtyModelView;
private dirtyModelViewInverse;
private _dirtyAxis;
protected _dirtyProjection: boolean;
protected dirtyProjectionInverse: boolean;
protected _near: number;
protected _far: number;
private readonly _matrixModelView;
private readonly _matrixProjectionInverse;
private _zoom;
constructor(options?: TgdCameraOptions);
getCurrentState(): Readonly<TgdCameraState>;
get near(): number;
set near(v: number);
get far(): number;
set far(v: number);
get screenAspectRatio(): number;
get screenWidth(): number;
set screenWidth(v: number);
get screenHeight(): number;
set screenHeight(v: number);
get spaceHeightAtTarget(): number;
set spaceHeightAtTarget(v: number);
get spaceWidthAtTarget(): number;
set spaceWidthAtTarget(v: number);
from(camera: TgdCamera): this;
fromTransfo(transfo: Readonly<TgdTransfo>): this;
/**
* @param screenX -1 is the left edge, 0 id the center and +1 is the right edge.
* @param screenY -1 is the bottom edge, 0 id the center and +1 is the top edge.
* @returns The __normalized__ ray vector that goes from the camera position
* to the point designed on the screen.
*/
abstract castRay(screenX: number, screenY: number): Readonly<{
origin: TgdVec3;
direction: TgdVec3;
}>;
abstract copyProjectionFrom(camera: TgdCamera): this;
/**
* This matrix will transform a world coordinate into a camera coordinate.
*/
get matrixModelView(): Readonly<TgdMat4>;
abstract get matrixProjection(): Readonly<TgdMat4>;
get matrixProjectionInverse(): Readonly<TgdMat4>;
get zoom(): number;
set zoom(v: number);
debug(caption?: string): void;
protected abstract getSpaceHeightAtTarget(): number;
protected abstract setSpaceHeightAtTarget(v: number): void;
private get dirtyModelView();
private set dirtyModelView(value);
protected get dirtyProjection(): boolean;
protected set dirtyProjection(v: boolean);
}
//# sourceMappingURL=camera.d.ts.map