|
@@ -1871,6 +1871,247 @@ declare module BABYLON {
|
|
}
|
|
}
|
|
|
|
|
|
declare module BABYLON {
|
|
declare module BABYLON {
|
|
|
|
+ class Collider {
|
|
|
|
+ radius: Vector3;
|
|
|
|
+ retry: number;
|
|
|
|
+ velocity: Vector3;
|
|
|
|
+ basePoint: Vector3;
|
|
|
|
+ epsilon: number;
|
|
|
|
+ collisionFound: boolean;
|
|
|
|
+ velocityWorldLength: number;
|
|
|
|
+ basePointWorld: Vector3;
|
|
|
|
+ velocityWorld: Vector3;
|
|
|
|
+ normalizedVelocity: Vector3;
|
|
|
|
+ initialVelocity: Vector3;
|
|
|
|
+ initialPosition: Vector3;
|
|
|
|
+ nearestDistance: number;
|
|
|
|
+ intersectionPoint: Vector3;
|
|
|
|
+ collidedMesh: AbstractMesh;
|
|
|
|
+ private _collisionPoint;
|
|
|
|
+ private _planeIntersectionPoint;
|
|
|
|
+ private _tempVector;
|
|
|
|
+ private _tempVector2;
|
|
|
|
+ private _tempVector3;
|
|
|
|
+ private _tempVector4;
|
|
|
|
+ private _edge;
|
|
|
|
+ private _baseToVertex;
|
|
|
|
+ private _destinationPoint;
|
|
|
|
+ private _slidePlaneNormal;
|
|
|
|
+ private _displacementVector;
|
|
|
|
+ _initialize(source: Vector3, dir: Vector3, e: number): void;
|
|
|
|
+ _checkPointInTriangle(point: Vector3, pa: Vector3, pb: Vector3, pc: Vector3, n: Vector3): boolean;
|
|
|
|
+ _canDoCollision(sphereCenter: Vector3, sphereRadius: number, vecMin: Vector3, vecMax: Vector3): boolean;
|
|
|
|
+ _testTriangle(faceIndex: number, trianglePlaneArray: Array<Plane>, p1: Vector3, p2: Vector3, p3: Vector3, hasMaterial: boolean): void;
|
|
|
|
+ _collide(trianglePlaneArray: Array<Plane>, pts: Vector3[], indices: number[] | Int32Array, indexStart: number, indexEnd: number, decal: number, hasMaterial: boolean): void;
|
|
|
|
+ _getResponse(pos: Vector3, vel: Vector3): void;
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+declare module BABYLON {
|
|
|
|
+ var CollisionWorker: string;
|
|
|
|
+ interface ICollisionCoordinator {
|
|
|
|
+ getNewPosition(position: Vector3, velocity: Vector3, collider: Collider, maximumRetry: number, excludedMesh: AbstractMesh, onNewPosition: (collisionIndex: number, newPosition: Vector3, collidedMesh?: AbstractMesh) => void, collisionIndex: number): void;
|
|
|
|
+ init(scene: Scene): void;
|
|
|
|
+ destroy(): void;
|
|
|
|
+ onMeshAdded(mesh: AbstractMesh): any;
|
|
|
|
+ onMeshUpdated(mesh: AbstractMesh): any;
|
|
|
|
+ onMeshRemoved(mesh: AbstractMesh): any;
|
|
|
|
+ onGeometryAdded(geometry: Geometry): any;
|
|
|
|
+ onGeometryUpdated(geometry: Geometry): any;
|
|
|
|
+ onGeometryDeleted(geometry: Geometry): any;
|
|
|
|
+ }
|
|
|
|
+ interface SerializedMesh {
|
|
|
|
+ id: string;
|
|
|
|
+ name: string;
|
|
|
|
+ uniqueId: number;
|
|
|
|
+ geometryId: string;
|
|
|
|
+ sphereCenter: Array<number>;
|
|
|
|
+ sphereRadius: number;
|
|
|
|
+ boxMinimum: Array<number>;
|
|
|
|
+ boxMaximum: Array<number>;
|
|
|
|
+ worldMatrixFromCache: any;
|
|
|
|
+ subMeshes: Array<SerializedSubMesh>;
|
|
|
|
+ checkCollisions: boolean;
|
|
|
|
+ }
|
|
|
|
+ interface SerializedSubMesh {
|
|
|
|
+ position: number;
|
|
|
|
+ verticesStart: number;
|
|
|
|
+ verticesCount: number;
|
|
|
|
+ indexStart: number;
|
|
|
|
+ indexCount: number;
|
|
|
|
+ hasMaterial: boolean;
|
|
|
|
+ sphereCenter: Array<number>;
|
|
|
|
+ sphereRadius: number;
|
|
|
|
+ boxMinimum: Array<number>;
|
|
|
|
+ boxMaximum: Array<number>;
|
|
|
|
+ }
|
|
|
|
+ interface SerializedGeometry {
|
|
|
|
+ id: string;
|
|
|
|
+ positions: Float32Array;
|
|
|
|
+ indices: Int32Array;
|
|
|
|
+ normals: Float32Array;
|
|
|
|
+ }
|
|
|
|
+ interface BabylonMessage {
|
|
|
|
+ taskType: WorkerTaskType;
|
|
|
|
+ payload: InitPayload | CollidePayload | UpdatePayload;
|
|
|
|
+ }
|
|
|
|
+ interface SerializedColliderToWorker {
|
|
|
|
+ position: Array<number>;
|
|
|
|
+ velocity: Array<number>;
|
|
|
|
+ radius: Array<number>;
|
|
|
|
+ }
|
|
|
|
+ enum WorkerTaskType {
|
|
|
|
+ INIT = 0,
|
|
|
|
+ UPDATE = 1,
|
|
|
|
+ COLLIDE = 2,
|
|
|
|
+ }
|
|
|
|
+ interface WorkerReply {
|
|
|
|
+ error: WorkerReplyType;
|
|
|
|
+ taskType: WorkerTaskType;
|
|
|
|
+ payload?: any;
|
|
|
|
+ }
|
|
|
|
+ interface CollisionReplyPayload {
|
|
|
|
+ newPosition: Array<number>;
|
|
|
|
+ collisionId: number;
|
|
|
|
+ collidedMeshUniqueId: number;
|
|
|
|
+ }
|
|
|
|
+ interface InitPayload {
|
|
|
|
+ }
|
|
|
|
+ interface CollidePayload {
|
|
|
|
+ collisionId: number;
|
|
|
|
+ collider: SerializedColliderToWorker;
|
|
|
|
+ maximumRetry: number;
|
|
|
|
+ excludedMeshUniqueId?: number;
|
|
|
|
+ }
|
|
|
|
+ interface UpdatePayload {
|
|
|
|
+ updatedMeshes: {
|
|
|
|
+ [n: number]: SerializedMesh;
|
|
|
|
+ };
|
|
|
|
+ updatedGeometries: {
|
|
|
|
+ [s: string]: SerializedGeometry;
|
|
|
|
+ };
|
|
|
|
+ removedMeshes: Array<number>;
|
|
|
|
+ removedGeometries: Array<string>;
|
|
|
|
+ }
|
|
|
|
+ enum WorkerReplyType {
|
|
|
|
+ SUCCESS = 0,
|
|
|
|
+ UNKNOWN_ERROR = 1,
|
|
|
|
+ }
|
|
|
|
+ class CollisionCoordinatorWorker implements ICollisionCoordinator {
|
|
|
|
+ private _scene;
|
|
|
|
+ private _scaledPosition;
|
|
|
|
+ private _scaledVelocity;
|
|
|
|
+ private _collisionsCallbackArray;
|
|
|
|
+ private _init;
|
|
|
|
+ private _runningUpdated;
|
|
|
|
+ private _runningCollisionTask;
|
|
|
|
+ private _worker;
|
|
|
|
+ private _addUpdateMeshesList;
|
|
|
|
+ private _addUpdateGeometriesList;
|
|
|
|
+ private _toRemoveMeshesArray;
|
|
|
|
+ private _toRemoveGeometryArray;
|
|
|
|
+ constructor();
|
|
|
|
+ static SerializeMesh: (mesh: AbstractMesh) => SerializedMesh;
|
|
|
|
+ static SerializeGeometry: (geometry: Geometry) => SerializedGeometry;
|
|
|
|
+ getNewPosition(position: Vector3, velocity: Vector3, collider: Collider, maximumRetry: number, excludedMesh: AbstractMesh, onNewPosition: (collisionIndex: number, newPosition: Vector3, collidedMesh?: AbstractMesh) => void, collisionIndex: number): void;
|
|
|
|
+ init(scene: Scene): void;
|
|
|
|
+ destroy(): void;
|
|
|
|
+ onMeshAdded(mesh: AbstractMesh): void;
|
|
|
|
+ onMeshUpdated: (mesh: AbstractMesh) => void;
|
|
|
|
+ onMeshRemoved(mesh: AbstractMesh): void;
|
|
|
|
+ onGeometryAdded(geometry: Geometry): void;
|
|
|
|
+ onGeometryUpdated: (geometry: Geometry) => void;
|
|
|
|
+ onGeometryDeleted(geometry: Geometry): void;
|
|
|
|
+ private _afterRender;
|
|
|
|
+ private _onMessageFromWorker;
|
|
|
|
+ }
|
|
|
|
+ class CollisionCoordinatorLegacy implements ICollisionCoordinator {
|
|
|
|
+ private _scene;
|
|
|
|
+ private _scaledPosition;
|
|
|
|
+ private _scaledVelocity;
|
|
|
|
+ private _finalPosition;
|
|
|
|
+ getNewPosition(position: Vector3, velocity: Vector3, collider: Collider, maximumRetry: number, excludedMesh: AbstractMesh, onNewPosition: (collisionIndex: number, newPosition: Vector3, collidedMesh?: AbstractMesh) => void, collisionIndex: number): void;
|
|
|
|
+ init(scene: Scene): void;
|
|
|
|
+ destroy(): void;
|
|
|
|
+ onMeshAdded(mesh: AbstractMesh): void;
|
|
|
|
+ onMeshUpdated(mesh: AbstractMesh): void;
|
|
|
|
+ onMeshRemoved(mesh: AbstractMesh): void;
|
|
|
|
+ onGeometryAdded(geometry: Geometry): void;
|
|
|
|
+ onGeometryUpdated(geometry: Geometry): void;
|
|
|
|
+ onGeometryDeleted(geometry: Geometry): void;
|
|
|
|
+ private _collideWithWorld(position, velocity, collider, maximumRetry, finalPosition, excludedMesh?);
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+declare module BABYLON {
|
|
|
|
+ var WorkerIncluded: boolean;
|
|
|
|
+ class CollisionCache {
|
|
|
|
+ private _meshes;
|
|
|
|
+ private _geometries;
|
|
|
|
+ getMeshes(): {
|
|
|
|
+ [n: number]: SerializedMesh;
|
|
|
|
+ };
|
|
|
|
+ getGeometries(): {
|
|
|
|
+ [s: number]: SerializedGeometry;
|
|
|
|
+ };
|
|
|
|
+ getMesh(id: any): SerializedMesh;
|
|
|
|
+ addMesh(mesh: SerializedMesh): void;
|
|
|
|
+ removeMesh(uniqueId: number): void;
|
|
|
|
+ getGeometry(id: string): SerializedGeometry;
|
|
|
|
+ addGeometry(geometry: SerializedGeometry): void;
|
|
|
|
+ removeGeometry(id: string): void;
|
|
|
|
+ }
|
|
|
|
+ class CollideWorker {
|
|
|
|
+ collider: Collider;
|
|
|
|
+ private _collisionCache;
|
|
|
|
+ private finalPosition;
|
|
|
|
+ private collisionsScalingMatrix;
|
|
|
|
+ private collisionTranformationMatrix;
|
|
|
|
+ constructor(collider: Collider, _collisionCache: CollisionCache, finalPosition: Vector3);
|
|
|
|
+ collideWithWorld(position: Vector3, velocity: Vector3, maximumRetry: number, excludedMeshUniqueId?: number): void;
|
|
|
|
+ private checkCollision(mesh);
|
|
|
|
+ private processCollisionsForSubMeshes(transformMatrix, mesh);
|
|
|
|
+ private collideForSubMesh(subMesh, transformMatrix, meshGeometry);
|
|
|
|
+ private checkSubmeshCollision(subMesh);
|
|
|
|
+ }
|
|
|
|
+ interface ICollisionDetector {
|
|
|
|
+ onInit(payload: InitPayload): void;
|
|
|
|
+ onUpdate(payload: UpdatePayload): void;
|
|
|
|
+ onCollision(payload: CollidePayload): void;
|
|
|
|
+ }
|
|
|
|
+ class CollisionDetectorTransferable implements ICollisionDetector {
|
|
|
|
+ private _collisionCache;
|
|
|
|
+ onInit(payload: InitPayload): void;
|
|
|
|
+ onUpdate(payload: UpdatePayload): void;
|
|
|
|
+ onCollision(payload: CollidePayload): void;
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+declare module BABYLON {
|
|
|
|
+ class IntersectionInfo {
|
|
|
|
+ bu: number;
|
|
|
|
+ bv: number;
|
|
|
|
+ distance: number;
|
|
|
|
+ faceId: number;
|
|
|
|
+ subMeshId: number;
|
|
|
|
+ constructor(bu: number, bv: number, distance: number);
|
|
|
|
+ }
|
|
|
|
+ class PickingInfo {
|
|
|
|
+ hit: boolean;
|
|
|
|
+ distance: number;
|
|
|
|
+ pickedPoint: Vector3;
|
|
|
|
+ pickedMesh: AbstractMesh;
|
|
|
|
+ bu: number;
|
|
|
|
+ bv: number;
|
|
|
|
+ faceId: number;
|
|
|
|
+ subMeshId: number;
|
|
|
|
+ pickedSprite: Sprite;
|
|
|
|
+ getNormal(useWorldCoordinates?: boolean, useVerticesNormals?: boolean): Vector3;
|
|
|
|
+ getTextureCoordinates(): Vector2;
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+declare module BABYLON {
|
|
class ArcRotateCamera extends TargetCamera {
|
|
class ArcRotateCamera extends TargetCamera {
|
|
alpha: number;
|
|
alpha: number;
|
|
beta: number;
|
|
beta: number;
|
|
@@ -2274,361 +2515,18 @@ declare module BABYLON {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
-declare module BABYLON {
|
|
|
|
- class UniversalCamera extends TouchCamera {
|
|
|
|
- gamepadAngularSensibility: number;
|
|
|
|
- gamepadMoveSensibility: number;
|
|
|
|
- constructor(name: string, position: Vector3, scene: Scene);
|
|
|
|
- getTypeName(): string;
|
|
|
|
- }
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-declare module BABYLON {
|
|
|
|
- class VirtualJoysticksCamera extends FreeCamera {
|
|
|
|
- constructor(name: string, position: Vector3, scene: Scene);
|
|
|
|
- }
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-declare module BABYLON {
|
|
|
|
- class BoundingBox {
|
|
|
|
- minimum: Vector3;
|
|
|
|
- maximum: Vector3;
|
|
|
|
- vectors: Vector3[];
|
|
|
|
- center: Vector3;
|
|
|
|
- extendSize: Vector3;
|
|
|
|
- directions: Vector3[];
|
|
|
|
- vectorsWorld: Vector3[];
|
|
|
|
- minimumWorld: Vector3;
|
|
|
|
- maximumWorld: Vector3;
|
|
|
|
- private _worldMatrix;
|
|
|
|
- constructor(minimum: Vector3, maximum: Vector3);
|
|
|
|
- getWorldMatrix(): Matrix;
|
|
|
|
- setWorldMatrix(matrix: Matrix): BoundingBox;
|
|
|
|
- _update(world: Matrix): void;
|
|
|
|
- isInFrustum(frustumPlanes: Plane[]): boolean;
|
|
|
|
- isCompletelyInFrustum(frustumPlanes: Plane[]): boolean;
|
|
|
|
- intersectsPoint(point: Vector3): boolean;
|
|
|
|
- intersectsSphere(sphere: BoundingSphere): boolean;
|
|
|
|
- intersectsMinMax(min: Vector3, max: Vector3): boolean;
|
|
|
|
- static Intersects(box0: BoundingBox, box1: BoundingBox): boolean;
|
|
|
|
- static IntersectsSphere(minPoint: Vector3, maxPoint: Vector3, sphereCenter: Vector3, sphereRadius: number): boolean;
|
|
|
|
- static IsCompletelyInFrustum(boundingVectors: Vector3[], frustumPlanes: Plane[]): boolean;
|
|
|
|
- static IsInFrustum(boundingVectors: Vector3[], frustumPlanes: Plane[]): boolean;
|
|
|
|
- }
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-declare module BABYLON {
|
|
|
|
- class BoundingInfo {
|
|
|
|
- minimum: Vector3;
|
|
|
|
- maximum: Vector3;
|
|
|
|
- boundingBox: BoundingBox;
|
|
|
|
- boundingSphere: BoundingSphere;
|
|
|
|
- private _isLocked;
|
|
|
|
- constructor(minimum: Vector3, maximum: Vector3);
|
|
|
|
- isLocked: boolean;
|
|
|
|
- update(world: Matrix): void;
|
|
|
|
- isInFrustum(frustumPlanes: Plane[]): boolean;
|
|
|
|
- isCompletelyInFrustum(frustumPlanes: Plane[]): boolean;
|
|
|
|
- _checkCollision(collider: Collider): boolean;
|
|
|
|
- intersectsPoint(point: Vector3): boolean;
|
|
|
|
- intersects(boundingInfo: BoundingInfo, precise: boolean): boolean;
|
|
|
|
- }
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-declare module BABYLON {
|
|
|
|
- class BoundingSphere {
|
|
|
|
- minimum: Vector3;
|
|
|
|
- maximum: Vector3;
|
|
|
|
- center: Vector3;
|
|
|
|
- radius: number;
|
|
|
|
- centerWorld: Vector3;
|
|
|
|
- radiusWorld: number;
|
|
|
|
- private _tempRadiusVector;
|
|
|
|
- constructor(minimum: Vector3, maximum: Vector3);
|
|
|
|
- _update(world: Matrix): void;
|
|
|
|
- isInFrustum(frustumPlanes: Plane[]): boolean;
|
|
|
|
- intersectsPoint(point: Vector3): boolean;
|
|
|
|
- static Intersects(sphere0: BoundingSphere, sphere1: BoundingSphere): boolean;
|
|
|
|
- }
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-declare module BABYLON {
|
|
|
|
- class Ray {
|
|
|
|
- origin: Vector3;
|
|
|
|
- direction: Vector3;
|
|
|
|
- length: number;
|
|
|
|
- private _edge1;
|
|
|
|
- private _edge2;
|
|
|
|
- private _pvec;
|
|
|
|
- private _tvec;
|
|
|
|
- private _qvec;
|
|
|
|
- constructor(origin: Vector3, direction: Vector3, length?: number);
|
|
|
|
- intersectsBoxMinMax(minimum: Vector3, maximum: Vector3): boolean;
|
|
|
|
- intersectsBox(box: BoundingBox): boolean;
|
|
|
|
- intersectsSphere(sphere: BoundingSphere): boolean;
|
|
|
|
- intersectsTriangle(vertex0: Vector3, vertex1: Vector3, vertex2: Vector3): IntersectionInfo;
|
|
|
|
- intersectsPlane(plane: Plane): number;
|
|
|
|
- private static smallnum;
|
|
|
|
- private static rayl;
|
|
|
|
- /**
|
|
|
|
- * Intersection test between the ray and a given segment whithin a given tolerance (threshold)
|
|
|
|
- * @param sega the first point of the segment to test the intersection against
|
|
|
|
- * @param segb the second point of the segment to test the intersection against
|
|
|
|
- * @param threshold the tolerance margin, if the ray doesn't intersect the segment but is close to the given threshold, the intersection is successful
|
|
|
|
- * @return the distance from the ray origin to the intersection point if there's intersection, or -1 if there's no intersection
|
|
|
|
- */
|
|
|
|
- intersectionSegment(sega: Vector3, segb: Vector3, threshold: number): number;
|
|
|
|
- static CreateNew(x: number, y: number, viewportWidth: number, viewportHeight: number, world: Matrix, view: Matrix, projection: Matrix): Ray;
|
|
|
|
- /**
|
|
|
|
- * Function will create a new transformed ray starting from origin and ending at the end point. Ray's length will be set, and ray will be
|
|
|
|
- * transformed to the given world matrix.
|
|
|
|
- * @param origin The origin point
|
|
|
|
- * @param end The end point
|
|
|
|
- * @param world a matrix to transform the ray to. Default is the identity matrix.
|
|
|
|
- */
|
|
|
|
- static CreateNewFromTo(origin: Vector3, end: Vector3, world?: Matrix): Ray;
|
|
|
|
- static Transform(ray: Ray, matrix: Matrix): Ray;
|
|
|
|
- }
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-declare module BABYLON {
|
|
|
|
- class Collider {
|
|
|
|
- radius: Vector3;
|
|
|
|
- retry: number;
|
|
|
|
- velocity: Vector3;
|
|
|
|
- basePoint: Vector3;
|
|
|
|
- epsilon: number;
|
|
|
|
- collisionFound: boolean;
|
|
|
|
- velocityWorldLength: number;
|
|
|
|
- basePointWorld: Vector3;
|
|
|
|
- velocityWorld: Vector3;
|
|
|
|
- normalizedVelocity: Vector3;
|
|
|
|
- initialVelocity: Vector3;
|
|
|
|
- initialPosition: Vector3;
|
|
|
|
- nearestDistance: number;
|
|
|
|
- intersectionPoint: Vector3;
|
|
|
|
- collidedMesh: AbstractMesh;
|
|
|
|
- private _collisionPoint;
|
|
|
|
- private _planeIntersectionPoint;
|
|
|
|
- private _tempVector;
|
|
|
|
- private _tempVector2;
|
|
|
|
- private _tempVector3;
|
|
|
|
- private _tempVector4;
|
|
|
|
- private _edge;
|
|
|
|
- private _baseToVertex;
|
|
|
|
- private _destinationPoint;
|
|
|
|
- private _slidePlaneNormal;
|
|
|
|
- private _displacementVector;
|
|
|
|
- _initialize(source: Vector3, dir: Vector3, e: number): void;
|
|
|
|
- _checkPointInTriangle(point: Vector3, pa: Vector3, pb: Vector3, pc: Vector3, n: Vector3): boolean;
|
|
|
|
- _canDoCollision(sphereCenter: Vector3, sphereRadius: number, vecMin: Vector3, vecMax: Vector3): boolean;
|
|
|
|
- _testTriangle(faceIndex: number, trianglePlaneArray: Array<Plane>, p1: Vector3, p2: Vector3, p3: Vector3, hasMaterial: boolean): void;
|
|
|
|
- _collide(trianglePlaneArray: Array<Plane>, pts: Vector3[], indices: number[] | Int32Array, indexStart: number, indexEnd: number, decal: number, hasMaterial: boolean): void;
|
|
|
|
- _getResponse(pos: Vector3, vel: Vector3): void;
|
|
|
|
- }
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-declare module BABYLON {
|
|
|
|
- var CollisionWorker: string;
|
|
|
|
- interface ICollisionCoordinator {
|
|
|
|
- getNewPosition(position: Vector3, velocity: Vector3, collider: Collider, maximumRetry: number, excludedMesh: AbstractMesh, onNewPosition: (collisionIndex: number, newPosition: Vector3, collidedMesh?: AbstractMesh) => void, collisionIndex: number): void;
|
|
|
|
- init(scene: Scene): void;
|
|
|
|
- destroy(): void;
|
|
|
|
- onMeshAdded(mesh: AbstractMesh): any;
|
|
|
|
- onMeshUpdated(mesh: AbstractMesh): any;
|
|
|
|
- onMeshRemoved(mesh: AbstractMesh): any;
|
|
|
|
- onGeometryAdded(geometry: Geometry): any;
|
|
|
|
- onGeometryUpdated(geometry: Geometry): any;
|
|
|
|
- onGeometryDeleted(geometry: Geometry): any;
|
|
|
|
- }
|
|
|
|
- interface SerializedMesh {
|
|
|
|
- id: string;
|
|
|
|
- name: string;
|
|
|
|
- uniqueId: number;
|
|
|
|
- geometryId: string;
|
|
|
|
- sphereCenter: Array<number>;
|
|
|
|
- sphereRadius: number;
|
|
|
|
- boxMinimum: Array<number>;
|
|
|
|
- boxMaximum: Array<number>;
|
|
|
|
- worldMatrixFromCache: any;
|
|
|
|
- subMeshes: Array<SerializedSubMesh>;
|
|
|
|
- checkCollisions: boolean;
|
|
|
|
- }
|
|
|
|
- interface SerializedSubMesh {
|
|
|
|
- position: number;
|
|
|
|
- verticesStart: number;
|
|
|
|
- verticesCount: number;
|
|
|
|
- indexStart: number;
|
|
|
|
- indexCount: number;
|
|
|
|
- hasMaterial: boolean;
|
|
|
|
- sphereCenter: Array<number>;
|
|
|
|
- sphereRadius: number;
|
|
|
|
- boxMinimum: Array<number>;
|
|
|
|
- boxMaximum: Array<number>;
|
|
|
|
- }
|
|
|
|
- interface SerializedGeometry {
|
|
|
|
- id: string;
|
|
|
|
- positions: Float32Array;
|
|
|
|
- indices: Int32Array;
|
|
|
|
- normals: Float32Array;
|
|
|
|
- }
|
|
|
|
- interface BabylonMessage {
|
|
|
|
- taskType: WorkerTaskType;
|
|
|
|
- payload: InitPayload | CollidePayload | UpdatePayload;
|
|
|
|
- }
|
|
|
|
- interface SerializedColliderToWorker {
|
|
|
|
- position: Array<number>;
|
|
|
|
- velocity: Array<number>;
|
|
|
|
- radius: Array<number>;
|
|
|
|
- }
|
|
|
|
- enum WorkerTaskType {
|
|
|
|
- INIT = 0,
|
|
|
|
- UPDATE = 1,
|
|
|
|
- COLLIDE = 2,
|
|
|
|
- }
|
|
|
|
- interface WorkerReply {
|
|
|
|
- error: WorkerReplyType;
|
|
|
|
- taskType: WorkerTaskType;
|
|
|
|
- payload?: any;
|
|
|
|
- }
|
|
|
|
- interface CollisionReplyPayload {
|
|
|
|
- newPosition: Array<number>;
|
|
|
|
- collisionId: number;
|
|
|
|
- collidedMeshUniqueId: number;
|
|
|
|
- }
|
|
|
|
- interface InitPayload {
|
|
|
|
- }
|
|
|
|
- interface CollidePayload {
|
|
|
|
- collisionId: number;
|
|
|
|
- collider: SerializedColliderToWorker;
|
|
|
|
- maximumRetry: number;
|
|
|
|
- excludedMeshUniqueId?: number;
|
|
|
|
- }
|
|
|
|
- interface UpdatePayload {
|
|
|
|
- updatedMeshes: {
|
|
|
|
- [n: number]: SerializedMesh;
|
|
|
|
- };
|
|
|
|
- updatedGeometries: {
|
|
|
|
- [s: string]: SerializedGeometry;
|
|
|
|
- };
|
|
|
|
- removedMeshes: Array<number>;
|
|
|
|
- removedGeometries: Array<string>;
|
|
|
|
- }
|
|
|
|
- enum WorkerReplyType {
|
|
|
|
- SUCCESS = 0,
|
|
|
|
- UNKNOWN_ERROR = 1,
|
|
|
|
- }
|
|
|
|
- class CollisionCoordinatorWorker implements ICollisionCoordinator {
|
|
|
|
- private _scene;
|
|
|
|
- private _scaledPosition;
|
|
|
|
- private _scaledVelocity;
|
|
|
|
- private _collisionsCallbackArray;
|
|
|
|
- private _init;
|
|
|
|
- private _runningUpdated;
|
|
|
|
- private _runningCollisionTask;
|
|
|
|
- private _worker;
|
|
|
|
- private _addUpdateMeshesList;
|
|
|
|
- private _addUpdateGeometriesList;
|
|
|
|
- private _toRemoveMeshesArray;
|
|
|
|
- private _toRemoveGeometryArray;
|
|
|
|
- constructor();
|
|
|
|
- static SerializeMesh: (mesh: AbstractMesh) => SerializedMesh;
|
|
|
|
- static SerializeGeometry: (geometry: Geometry) => SerializedGeometry;
|
|
|
|
- getNewPosition(position: Vector3, velocity: Vector3, collider: Collider, maximumRetry: number, excludedMesh: AbstractMesh, onNewPosition: (collisionIndex: number, newPosition: Vector3, collidedMesh?: AbstractMesh) => void, collisionIndex: number): void;
|
|
|
|
- init(scene: Scene): void;
|
|
|
|
- destroy(): void;
|
|
|
|
- onMeshAdded(mesh: AbstractMesh): void;
|
|
|
|
- onMeshUpdated: (mesh: AbstractMesh) => void;
|
|
|
|
- onMeshRemoved(mesh: AbstractMesh): void;
|
|
|
|
- onGeometryAdded(geometry: Geometry): void;
|
|
|
|
- onGeometryUpdated: (geometry: Geometry) => void;
|
|
|
|
- onGeometryDeleted(geometry: Geometry): void;
|
|
|
|
- private _afterRender;
|
|
|
|
- private _onMessageFromWorker;
|
|
|
|
- }
|
|
|
|
- class CollisionCoordinatorLegacy implements ICollisionCoordinator {
|
|
|
|
- private _scene;
|
|
|
|
- private _scaledPosition;
|
|
|
|
- private _scaledVelocity;
|
|
|
|
- private _finalPosition;
|
|
|
|
- getNewPosition(position: Vector3, velocity: Vector3, collider: Collider, maximumRetry: number, excludedMesh: AbstractMesh, onNewPosition: (collisionIndex: number, newPosition: Vector3, collidedMesh?: AbstractMesh) => void, collisionIndex: number): void;
|
|
|
|
- init(scene: Scene): void;
|
|
|
|
- destroy(): void;
|
|
|
|
- onMeshAdded(mesh: AbstractMesh): void;
|
|
|
|
- onMeshUpdated(mesh: AbstractMesh): void;
|
|
|
|
- onMeshRemoved(mesh: AbstractMesh): void;
|
|
|
|
- onGeometryAdded(geometry: Geometry): void;
|
|
|
|
- onGeometryUpdated(geometry: Geometry): void;
|
|
|
|
- onGeometryDeleted(geometry: Geometry): void;
|
|
|
|
- private _collideWithWorld(position, velocity, collider, maximumRetry, finalPosition, excludedMesh?);
|
|
|
|
- }
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-declare module BABYLON {
|
|
|
|
- var WorkerIncluded: boolean;
|
|
|
|
- class CollisionCache {
|
|
|
|
- private _meshes;
|
|
|
|
- private _geometries;
|
|
|
|
- getMeshes(): {
|
|
|
|
- [n: number]: SerializedMesh;
|
|
|
|
- };
|
|
|
|
- getGeometries(): {
|
|
|
|
- [s: number]: SerializedGeometry;
|
|
|
|
- };
|
|
|
|
- getMesh(id: any): SerializedMesh;
|
|
|
|
- addMesh(mesh: SerializedMesh): void;
|
|
|
|
- removeMesh(uniqueId: number): void;
|
|
|
|
- getGeometry(id: string): SerializedGeometry;
|
|
|
|
- addGeometry(geometry: SerializedGeometry): void;
|
|
|
|
- removeGeometry(id: string): void;
|
|
|
|
- }
|
|
|
|
- class CollideWorker {
|
|
|
|
- collider: Collider;
|
|
|
|
- private _collisionCache;
|
|
|
|
- private finalPosition;
|
|
|
|
- private collisionsScalingMatrix;
|
|
|
|
- private collisionTranformationMatrix;
|
|
|
|
- constructor(collider: Collider, _collisionCache: CollisionCache, finalPosition: Vector3);
|
|
|
|
- collideWithWorld(position: Vector3, velocity: Vector3, maximumRetry: number, excludedMeshUniqueId?: number): void;
|
|
|
|
- private checkCollision(mesh);
|
|
|
|
- private processCollisionsForSubMeshes(transformMatrix, mesh);
|
|
|
|
- private collideForSubMesh(subMesh, transformMatrix, meshGeometry);
|
|
|
|
- private checkSubmeshCollision(subMesh);
|
|
|
|
- }
|
|
|
|
- interface ICollisionDetector {
|
|
|
|
- onInit(payload: InitPayload): void;
|
|
|
|
- onUpdate(payload: UpdatePayload): void;
|
|
|
|
- onCollision(payload: CollidePayload): void;
|
|
|
|
- }
|
|
|
|
- class CollisionDetectorTransferable implements ICollisionDetector {
|
|
|
|
- private _collisionCache;
|
|
|
|
- onInit(payload: InitPayload): void;
|
|
|
|
- onUpdate(payload: UpdatePayload): void;
|
|
|
|
- onCollision(payload: CollidePayload): void;
|
|
|
|
- }
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-declare module BABYLON {
|
|
|
|
- class IntersectionInfo {
|
|
|
|
- bu: number;
|
|
|
|
- bv: number;
|
|
|
|
- distance: number;
|
|
|
|
- faceId: number;
|
|
|
|
- subMeshId: number;
|
|
|
|
- constructor(bu: number, bv: number, distance: number);
|
|
|
|
- }
|
|
|
|
- class PickingInfo {
|
|
|
|
- hit: boolean;
|
|
|
|
- distance: number;
|
|
|
|
- pickedPoint: Vector3;
|
|
|
|
- pickedMesh: AbstractMesh;
|
|
|
|
- bu: number;
|
|
|
|
- bv: number;
|
|
|
|
- faceId: number;
|
|
|
|
- subMeshId: number;
|
|
|
|
- pickedSprite: Sprite;
|
|
|
|
- getNormal(useWorldCoordinates?: boolean, useVerticesNormals?: boolean): Vector3;
|
|
|
|
- getTextureCoordinates(): Vector2;
|
|
|
|
|
|
+declare module BABYLON {
|
|
|
|
+ class UniversalCamera extends TouchCamera {
|
|
|
|
+ gamepadAngularSensibility: number;
|
|
|
|
+ gamepadMoveSensibility: number;
|
|
|
|
+ constructor(name: string, position: Vector3, scene: Scene);
|
|
|
|
+ getTypeName(): string;
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+declare module BABYLON {
|
|
|
|
+ class VirtualJoysticksCamera extends FreeCamera {
|
|
|
|
+ constructor(name: string, position: Vector3, scene: Scene);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -2718,6 +2616,108 @@ declare module BABYLON.Debug {
|
|
}
|
|
}
|
|
|
|
|
|
declare module BABYLON {
|
|
declare module BABYLON {
|
|
|
|
+ class BoundingBox {
|
|
|
|
+ minimum: Vector3;
|
|
|
|
+ maximum: Vector3;
|
|
|
|
+ vectors: Vector3[];
|
|
|
|
+ center: Vector3;
|
|
|
|
+ extendSize: Vector3;
|
|
|
|
+ directions: Vector3[];
|
|
|
|
+ vectorsWorld: Vector3[];
|
|
|
|
+ minimumWorld: Vector3;
|
|
|
|
+ maximumWorld: Vector3;
|
|
|
|
+ private _worldMatrix;
|
|
|
|
+ constructor(minimum: Vector3, maximum: Vector3);
|
|
|
|
+ getWorldMatrix(): Matrix;
|
|
|
|
+ setWorldMatrix(matrix: Matrix): BoundingBox;
|
|
|
|
+ _update(world: Matrix): void;
|
|
|
|
+ isInFrustum(frustumPlanes: Plane[]): boolean;
|
|
|
|
+ isCompletelyInFrustum(frustumPlanes: Plane[]): boolean;
|
|
|
|
+ intersectsPoint(point: Vector3): boolean;
|
|
|
|
+ intersectsSphere(sphere: BoundingSphere): boolean;
|
|
|
|
+ intersectsMinMax(min: Vector3, max: Vector3): boolean;
|
|
|
|
+ static Intersects(box0: BoundingBox, box1: BoundingBox): boolean;
|
|
|
|
+ static IntersectsSphere(minPoint: Vector3, maxPoint: Vector3, sphereCenter: Vector3, sphereRadius: number): boolean;
|
|
|
|
+ static IsCompletelyInFrustum(boundingVectors: Vector3[], frustumPlanes: Plane[]): boolean;
|
|
|
|
+ static IsInFrustum(boundingVectors: Vector3[], frustumPlanes: Plane[]): boolean;
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+declare module BABYLON {
|
|
|
|
+ class BoundingInfo {
|
|
|
|
+ minimum: Vector3;
|
|
|
|
+ maximum: Vector3;
|
|
|
|
+ boundingBox: BoundingBox;
|
|
|
|
+ boundingSphere: BoundingSphere;
|
|
|
|
+ private _isLocked;
|
|
|
|
+ constructor(minimum: Vector3, maximum: Vector3);
|
|
|
|
+ isLocked: boolean;
|
|
|
|
+ update(world: Matrix): void;
|
|
|
|
+ isInFrustum(frustumPlanes: Plane[]): boolean;
|
|
|
|
+ isCompletelyInFrustum(frustumPlanes: Plane[]): boolean;
|
|
|
|
+ _checkCollision(collider: Collider): boolean;
|
|
|
|
+ intersectsPoint(point: Vector3): boolean;
|
|
|
|
+ intersects(boundingInfo: BoundingInfo, precise: boolean): boolean;
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+declare module BABYLON {
|
|
|
|
+ class BoundingSphere {
|
|
|
|
+ minimum: Vector3;
|
|
|
|
+ maximum: Vector3;
|
|
|
|
+ center: Vector3;
|
|
|
|
+ radius: number;
|
|
|
|
+ centerWorld: Vector3;
|
|
|
|
+ radiusWorld: number;
|
|
|
|
+ private _tempRadiusVector;
|
|
|
|
+ constructor(minimum: Vector3, maximum: Vector3);
|
|
|
|
+ _update(world: Matrix): void;
|
|
|
|
+ isInFrustum(frustumPlanes: Plane[]): boolean;
|
|
|
|
+ intersectsPoint(point: Vector3): boolean;
|
|
|
|
+ static Intersects(sphere0: BoundingSphere, sphere1: BoundingSphere): boolean;
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+declare module BABYLON {
|
|
|
|
+ class Ray {
|
|
|
|
+ origin: Vector3;
|
|
|
|
+ direction: Vector3;
|
|
|
|
+ length: number;
|
|
|
|
+ private _edge1;
|
|
|
|
+ private _edge2;
|
|
|
|
+ private _pvec;
|
|
|
|
+ private _tvec;
|
|
|
|
+ private _qvec;
|
|
|
|
+ constructor(origin: Vector3, direction: Vector3, length?: number);
|
|
|
|
+ intersectsBoxMinMax(minimum: Vector3, maximum: Vector3): boolean;
|
|
|
|
+ intersectsBox(box: BoundingBox): boolean;
|
|
|
|
+ intersectsSphere(sphere: BoundingSphere): boolean;
|
|
|
|
+ intersectsTriangle(vertex0: Vector3, vertex1: Vector3, vertex2: Vector3): IntersectionInfo;
|
|
|
|
+ intersectsPlane(plane: Plane): number;
|
|
|
|
+ private static smallnum;
|
|
|
|
+ private static rayl;
|
|
|
|
+ /**
|
|
|
|
+ * Intersection test between the ray and a given segment whithin a given tolerance (threshold)
|
|
|
|
+ * @param sega the first point of the segment to test the intersection against
|
|
|
|
+ * @param segb the second point of the segment to test the intersection against
|
|
|
|
+ * @param threshold the tolerance margin, if the ray doesn't intersect the segment but is close to the given threshold, the intersection is successful
|
|
|
|
+ * @return the distance from the ray origin to the intersection point if there's intersection, or -1 if there's no intersection
|
|
|
|
+ */
|
|
|
|
+ intersectionSegment(sega: Vector3, segb: Vector3, threshold: number): number;
|
|
|
|
+ static CreateNew(x: number, y: number, viewportWidth: number, viewportHeight: number, world: Matrix, view: Matrix, projection: Matrix): Ray;
|
|
|
|
+ /**
|
|
|
|
+ * Function will create a new transformed ray starting from origin and ending at the end point. Ray's length will be set, and ray will be
|
|
|
|
+ * transformed to the given world matrix.
|
|
|
|
+ * @param origin The origin point
|
|
|
|
+ * @param end The end point
|
|
|
|
+ * @param world a matrix to transform the ray to. Default is the identity matrix.
|
|
|
|
+ */
|
|
|
|
+ static CreateNewFromTo(origin: Vector3, end: Vector3, world?: Matrix): Ray;
|
|
|
|
+ static Transform(ray: Ray, matrix: Matrix): Ray;
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+declare module BABYLON {
|
|
class Layer {
|
|
class Layer {
|
|
name: string;
|
|
name: string;
|
|
texture: Texture;
|
|
texture: Texture;
|
|
@@ -7241,28 +7241,6 @@ declare module BABYLON {
|
|
}
|
|
}
|
|
|
|
|
|
declare module BABYLON {
|
|
declare module BABYLON {
|
|
- class ReflectionProbe {
|
|
|
|
- name: string;
|
|
|
|
- private _scene;
|
|
|
|
- private _renderTargetTexture;
|
|
|
|
- private _projectionMatrix;
|
|
|
|
- private _viewMatrix;
|
|
|
|
- private _target;
|
|
|
|
- private _add;
|
|
|
|
- private _attachedMesh;
|
|
|
|
- invertYAxis: boolean;
|
|
|
|
- position: Vector3;
|
|
|
|
- constructor(name: string, size: number, scene: Scene, generateMipMaps?: boolean);
|
|
|
|
- refreshRate: number;
|
|
|
|
- getScene(): Scene;
|
|
|
|
- cubeTexture: RenderTargetTexture;
|
|
|
|
- renderList: AbstractMesh[];
|
|
|
|
- attachToMesh(mesh: AbstractMesh): void;
|
|
|
|
- dispose(): void;
|
|
|
|
- }
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-declare module BABYLON {
|
|
|
|
class AnaglyphPostProcess extends PostProcess {
|
|
class AnaglyphPostProcess extends PostProcess {
|
|
constructor(name: string, ratio: number, camera: Camera, samplingMode?: number, engine?: Engine, reusable?: boolean);
|
|
constructor(name: string, ratio: number, camera: Camera, samplingMode?: number, engine?: Engine, reusable?: boolean);
|
|
}
|
|
}
|
|
@@ -7841,6 +7819,28 @@ declare module BABYLON {
|
|
}
|
|
}
|
|
|
|
|
|
declare module BABYLON {
|
|
declare module BABYLON {
|
|
|
|
+ class ReflectionProbe {
|
|
|
|
+ name: string;
|
|
|
|
+ private _scene;
|
|
|
|
+ private _renderTargetTexture;
|
|
|
|
+ private _projectionMatrix;
|
|
|
|
+ private _viewMatrix;
|
|
|
|
+ private _target;
|
|
|
|
+ private _add;
|
|
|
|
+ private _attachedMesh;
|
|
|
|
+ invertYAxis: boolean;
|
|
|
|
+ position: Vector3;
|
|
|
|
+ constructor(name: string, size: number, scene: Scene, generateMipMaps?: boolean);
|
|
|
|
+ refreshRate: number;
|
|
|
|
+ getScene(): Scene;
|
|
|
|
+ cubeTexture: RenderTargetTexture;
|
|
|
|
+ renderList: AbstractMesh[];
|
|
|
|
+ attachToMesh(mesh: AbstractMesh): void;
|
|
|
|
+ dispose(): void;
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+declare module BABYLON {
|
|
class BoundingBoxRenderer {
|
|
class BoundingBoxRenderer {
|
|
frontColor: Color3;
|
|
frontColor: Color3;
|
|
backColor: Color3;
|
|
backColor: Color3;
|
|
@@ -7950,6 +7950,46 @@ declare module BABYLON {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+declare module BABYLON.Internals {
|
|
|
|
+ class _AlphaState {
|
|
|
|
+ private _isAlphaBlendDirty;
|
|
|
|
+ private _isBlendFunctionParametersDirty;
|
|
|
|
+ private _alphaBlend;
|
|
|
|
+ private _blendFunctionParameters;
|
|
|
|
+ isDirty: boolean;
|
|
|
|
+ alphaBlend: boolean;
|
|
|
|
+ setAlphaBlendFunctionParameters(value0: number, value1: number, value2: number, value3: number): void;
|
|
|
|
+ reset(): void;
|
|
|
|
+ apply(gl: WebGLRenderingContext): void;
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+declare module BABYLON.Internals {
|
|
|
|
+ class _DepthCullingState {
|
|
|
|
+ private _isDepthTestDirty;
|
|
|
|
+ private _isDepthMaskDirty;
|
|
|
|
+ private _isDepthFuncDirty;
|
|
|
|
+ private _isCullFaceDirty;
|
|
|
|
+ private _isCullDirty;
|
|
|
|
+ private _isZOffsetDirty;
|
|
|
|
+ private _depthTest;
|
|
|
|
+ private _depthMask;
|
|
|
|
+ private _depthFunc;
|
|
|
|
+ private _cull;
|
|
|
|
+ private _cullFace;
|
|
|
|
+ private _zOffset;
|
|
|
|
+ isDirty: boolean;
|
|
|
|
+ zOffset: number;
|
|
|
|
+ cullFace: number;
|
|
|
|
+ cull: boolean;
|
|
|
|
+ depthFunc: number;
|
|
|
|
+ depthMask: boolean;
|
|
|
|
+ depthTest: boolean;
|
|
|
|
+ reset(): void;
|
|
|
|
+ apply(gl: WebGLRenderingContext): void;
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
declare module BABYLON {
|
|
declare module BABYLON {
|
|
class Sprite {
|
|
class Sprite {
|
|
name: string;
|
|
name: string;
|
|
@@ -8014,46 +8054,6 @@ declare module BABYLON {
|
|
}
|
|
}
|
|
|
|
|
|
declare module BABYLON.Internals {
|
|
declare module BABYLON.Internals {
|
|
- class _AlphaState {
|
|
|
|
- private _isAlphaBlendDirty;
|
|
|
|
- private _isBlendFunctionParametersDirty;
|
|
|
|
- private _alphaBlend;
|
|
|
|
- private _blendFunctionParameters;
|
|
|
|
- isDirty: boolean;
|
|
|
|
- alphaBlend: boolean;
|
|
|
|
- setAlphaBlendFunctionParameters(value0: number, value1: number, value2: number, value3: number): void;
|
|
|
|
- reset(): void;
|
|
|
|
- apply(gl: WebGLRenderingContext): void;
|
|
|
|
- }
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-declare module BABYLON.Internals {
|
|
|
|
- class _DepthCullingState {
|
|
|
|
- private _isDepthTestDirty;
|
|
|
|
- private _isDepthMaskDirty;
|
|
|
|
- private _isDepthFuncDirty;
|
|
|
|
- private _isCullFaceDirty;
|
|
|
|
- private _isCullDirty;
|
|
|
|
- private _isZOffsetDirty;
|
|
|
|
- private _depthTest;
|
|
|
|
- private _depthMask;
|
|
|
|
- private _depthFunc;
|
|
|
|
- private _cull;
|
|
|
|
- private _cullFace;
|
|
|
|
- private _zOffset;
|
|
|
|
- isDirty: boolean;
|
|
|
|
- zOffset: number;
|
|
|
|
- cullFace: number;
|
|
|
|
- cull: boolean;
|
|
|
|
- depthFunc: number;
|
|
|
|
- depthMask: boolean;
|
|
|
|
- depthTest: boolean;
|
|
|
|
- reset(): void;
|
|
|
|
- apply(gl: WebGLRenderingContext): void;
|
|
|
|
- }
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-declare module BABYLON.Internals {
|
|
|
|
class AndOrNotEvaluator {
|
|
class AndOrNotEvaluator {
|
|
static Eval(query: string, evaluateCallback: (val: any) => boolean): boolean;
|
|
static Eval(query: string, evaluateCallback: (val: any) => boolean): boolean;
|
|
private static _HandleParenthesisContent(parenthesisContent, evaluateCallback);
|
|
private static _HandleParenthesisContent(parenthesisContent, evaluateCallback);
|
|
@@ -8193,38 +8193,73 @@ declare module BABYLON {
|
|
}
|
|
}
|
|
|
|
|
|
declare module BABYLON {
|
|
declare module BABYLON {
|
|
|
|
+ class DynamicFloatArrayElementInfo {
|
|
|
|
+ offset: number;
|
|
|
|
+ }
|
|
/**
|
|
/**
|
|
* The purpose of this class is to store float32 based elements of a given size (defined by the stride argument) in a dynamic fashion, that is, you can add/free elements. You can then access to a defragmented/packed version of the underlying Float32Array by calling the pack() method.
|
|
* The purpose of this class is to store float32 based elements of a given size (defined by the stride argument) in a dynamic fashion, that is, you can add/free elements. You can then access to a defragmented/packed version of the underlying Float32Array by calling the pack() method.
|
|
* The intent is to maintain through time data that will be bound to a WebGlBuffer with the ability to change add/remove elements.
|
|
* The intent is to maintain through time data that will be bound to a WebGlBuffer with the ability to change add/remove elements.
|
|
* It was first built to effiently maintain the WebGlBuffer that contain instancing based data.
|
|
* It was first built to effiently maintain the WebGlBuffer that contain instancing based data.
|
|
- * Allocating an Element will return a instance of DynamicFloatArrayEntry which contains the offset into the Float32Array of where the element starts, you are then responsible to copy your data using this offset.
|
|
|
|
|
|
+ * Allocating an Element will return a instance of DynamicFloatArrayElement which contains the offset into the Float32Array of where the element starts, you are then responsible to copy your data using this offset.
|
|
* Beware, calling pack() may change the offset of some Entries because this method will defrag the Float32Array to replace empty elements by moving allocated ones at their location.
|
|
* Beware, calling pack() may change the offset of some Entries because this method will defrag the Float32Array to replace empty elements by moving allocated ones at their location.
|
|
- * This method will retrun an ArrayBufferView on the existing Float32Array that describes the occupied elements. Use this View to update the WebGLBuffer and NOT the "buffer" field of the class. The pack() method won't shrink/reallocate the buffer to keep it GC friendly, all the empty space will be put at the end of the buffer, the method just ensure there're no "free holes".
|
|
|
|
|
|
+ * This method will return an ArrayBufferView on the existing Float32Array that describes the used elements. Use this View to update the WebGLBuffer and NOT the "buffer" field of the class. The pack() method won't shrink/reallocate the buffer to keep it GC friendly, all the empty space will be put at the end of the buffer, the method just ensure there're no "free holes".
|
|
*/
|
|
*/
|
|
class DynamicFloatArray {
|
|
class DynamicFloatArray {
|
|
/**
|
|
/**
|
|
* Construct an instance of the dynamic float array
|
|
* Construct an instance of the dynamic float array
|
|
- * @param stride size of one entry in float (i.e. not bytes!)
|
|
|
|
- * @param initialEntryCount the number of available entries at construction
|
|
|
|
|
|
+ * @param stride size of one element in float (i.e. not bytes!)
|
|
|
|
+ * @param initialElementCount the number of available entries at construction
|
|
*/
|
|
*/
|
|
- constructor(stride: number, initialEntryCount: number);
|
|
|
|
- allocElement(): DynamicFloatArrayEntry;
|
|
|
|
- freeElement(entry: DynamicFloatArrayEntry): void;
|
|
|
|
|
|
+ constructor(stride: number, initialElementCount: number);
|
|
/**
|
|
/**
|
|
- * This method will pack all the occupied elements into a linear sequence and free the rest.
|
|
|
|
- * Instances of DynamicFloatArrayEntry may have their 'offset' member changed as data could be copied from one location to another, so be sure to read/write your data based on the value inside this member after you called pack().
|
|
|
|
|
|
+ * Allocate an element in the array.
|
|
|
|
+ * @return the element info instance that contains the offset into the main buffer of the element's location.
|
|
|
|
+ * Beware, this offset may change when you call pack()
|
|
|
|
+ */
|
|
|
|
+ allocElement(): DynamicFloatArrayElementInfo;
|
|
|
|
+ /**
|
|
|
|
+ * Free the element corresponding to the given element info
|
|
|
|
+ * @param elInfo the element that describe the allocated element
|
|
|
|
+ */
|
|
|
|
+ freeElement(elInfo: DynamicFloatArrayElementInfo): void;
|
|
|
|
+ /**
|
|
|
|
+ * This method will pack all the used elements into a linear sequence and put all the free space at the end.
|
|
|
|
+ * Instances of DynamicFloatArrayElement may have their 'offset' member changed as data could be copied from one location to another, so be sure to read/write your data based on the value inside this member after you called pack().
|
|
|
|
+ * @return the subarray that is the view of the used elements area, you can use it as a source to update a WebGLBuffer
|
|
*/
|
|
*/
|
|
pack(): Float32Array;
|
|
pack(): Float32Array;
|
|
- private _moveEntry(entry, destOffset);
|
|
|
|
|
|
+ private _moveElement(element, destOffset);
|
|
private _growBuffer();
|
|
private _growBuffer();
|
|
|
|
+ /**
|
|
|
|
+ * This is the main buffer, all elements are stored inside, you use the DynamicFloatArrayElement instance of a given element to know its location into this buffer, then you have the responsability to perform write operations in this buffer at the right location!
|
|
|
|
+ * Don't use this buffer for a WebGL bufferSubData() operation, but use the one returned by the pack() method.
|
|
|
|
+ */
|
|
buffer: Float32Array;
|
|
buffer: Float32Array;
|
|
- entryCount: number;
|
|
|
|
|
|
+ /**
|
|
|
|
+ * Get the total count of entries that can fit in the current buffer
|
|
|
|
+ * @returns the elements count
|
|
|
|
+ */
|
|
|
|
+ totalElementCount: number;
|
|
|
|
+ /**
|
|
|
|
+ * Get the count of free entries that can still be allocated without resizing the buffer
|
|
|
|
+ * @returns the free elements count
|
|
|
|
+ */
|
|
|
|
+ freeElementCount: number;
|
|
|
|
+ /**
|
|
|
|
+ * Get the count of allocated elements
|
|
|
|
+ * @returns the allocated elements count
|
|
|
|
+ */
|
|
|
|
+ usedElementCount: number;
|
|
|
|
+ /**
|
|
|
|
+ * Return the size of one element in float
|
|
|
|
+ * @returns the size in float
|
|
|
|
+ */
|
|
stride: number;
|
|
stride: number;
|
|
- allEntries: Array<DynamicFloatArrayEntry>;
|
|
|
|
- freeEntries: Array<DynamicFloatArrayEntry>;
|
|
|
|
- }
|
|
|
|
- class DynamicFloatArrayEntry {
|
|
|
|
- offset: number;
|
|
|
|
|
|
+ private _allEntries;
|
|
|
|
+ private _freeEntries;
|
|
|
|
+ private _stride;
|
|
|
|
+ private _lastUsed;
|
|
|
|
+ private _firstFree;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|