Files
nothoughts/node_modules/pixi.js/lib/scene/mesh-perspective/PerspectiveMesh.mjs
2025-08-04 18:57:35 +02:00

89 lines
2.5 KiB
JavaScript

import { Texture } from '../../rendering/renderers/shared/texture/Texture.mjs';
import { definedProps } from '../container/utils/definedProps.mjs';
import { Mesh } from '../mesh/shared/Mesh.mjs';
import { PerspectivePlaneGeometry } from './PerspectivePlaneGeometry.mjs';
"use strict";
const _PerspectiveMesh = class _PerspectiveMesh extends Mesh {
/**
* @param options - Options to be applied to PerspectiveMesh
*/
constructor(options) {
options = { ..._PerspectiveMesh.defaultOptions, ...options };
const { texture, verticesX, verticesY, ...rest } = options;
const planeGeometry = new PerspectivePlaneGeometry(definedProps({
width: texture.width,
height: texture.height,
verticesX,
verticesY
}));
super(definedProps({ ...rest, geometry: planeGeometry }));
this._texture = texture;
this.geometry.setCorners(
options.x0,
options.y0,
options.x1,
options.y1,
options.x2,
options.y2,
options.x3,
options.y3
);
}
/** Update the geometry when the texture is updated */
textureUpdated() {
const geometry = this.geometry;
if (!geometry)
return;
const { width, height } = this.texture;
if (geometry.width !== width || geometry.height !== height) {
geometry.width = width;
geometry.height = height;
geometry.updateProjection();
}
}
set texture(value) {
if (this._texture === value)
return;
super.texture = value;
this.textureUpdated();
}
/** The texture that the mesh uses */
get texture() {
return this._texture;
}
/**
* Set the corners of the quad to the given coordinates
* The mesh will then calculate the perspective so it looks correct!
* @param x0 - x coordinate of the first corner
* @param y0 - y coordinate of the first corner
* @param x1 - x coordinate of the second corner
* @param y1 - y coordinate of the second corner
* @param x2 - x coordinate of the third corner
* @param y2 - y coordinate of the third corner
* @param x3 - x coordinate of the fourth corner
* @param y3 - y coordinate of the fourth corner
*/
setCorners(x0, y0, x1, y1, x2, y2, x3, y3) {
this.geometry.setCorners(x0, y0, x1, y1, x2, y2, x3, y3);
}
};
/** default options for the mesh */
_PerspectiveMesh.defaultOptions = {
texture: Texture.WHITE,
verticesX: 10,
verticesY: 10,
x0: 0,
y0: 0,
x1: 100,
y1: 0,
x2: 100,
y2: 100,
x3: 0,
y3: 100
};
let PerspectiveMesh = _PerspectiveMesh;
export { PerspectiveMesh };
//# sourceMappingURL=PerspectiveMesh.mjs.map