123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- module BABYLON {
- export class MirrorTexture extends RenderTargetTexture {
- public mirrorPlane = new BABYLON.Plane(0, 1, 0, 1);
- private _transformMatrix = BABYLON.Matrix.Zero();
- private _mirrorMatrix = BABYLON.Matrix.Zero();
- private _savedViewMatrix: Matrix;
- constructor(name: string, size: number, scene: Scene, generateMipMaps?: boolean) {
- super(name, size, scene, generateMipMaps, true);
- this.onBeforeRender = () => {
- BABYLON.Matrix.ReflectionToRef(this.mirrorPlane, this._mirrorMatrix);
- this._savedViewMatrix = scene.getViewMatrix();
- this._mirrorMatrix.multiplyToRef(this._savedViewMatrix, this._transformMatrix);
- scene.setTransformMatrix(this._transformMatrix, scene.getProjectionMatrix());
- scene.clipPlane = this.mirrorPlane;
- scene.getEngine().cullBackFaces = false;
- }
- this.onAfterRender = () => {
- scene.setTransformMatrix(this._savedViewMatrix, scene.getProjectionMatrix());
- scene.getEngine().cullBackFaces = true;
- delete scene.clipPlane;
- }
- }
- public clone(): MirrorTexture {
- var textureSize = this.getSize();
- var newTexture = new BABYLON.MirrorTexture(this.name, textureSize.width, this.getScene(), this._generateMipMaps);
- // Base texture
- newTexture.hasAlpha = this.hasAlpha;
- newTexture.level = this.level;
- // Mirror Texture
- newTexture.mirrorPlane = this.mirrorPlane.clone();
- newTexture.renderList = this.renderList.slice(0);
- return newTexture;
- }
- }
- }
|