@tolokoban/tgd
Version:
ToloGameDev library for WebGL2
51 lines • 4.02 kB
JavaScript
import { TgdDataset } from "./../dataset/index.js";
import { TgdGeometry } from "./geometry.js";
import { TgdVec3 } from "./../math/index.js";
export class TgdGeometryPlane extends TgdGeometry {
constructor({ sizeX = 1, sizeY = 1, vecX = [1, 0, 0], vecY = [0, 0, 1], } = {}) {
const vec = (x, y) => {
const sx = x * sizeX;
const sy = y * sizeY;
return [
sx * vecX[0] + sy * vecY[0],
sx * vecX[1] + sy * vecY[1],
sx * vecX[2] + sy * vecY[2],
];
};
const dataset = new TgdDataset({
POSITION: "vec3",
NORMAL: "vec3",
TEXCOORD_0: "vec2",
});
const H = 0.5;
// prettier-ignore
dataset.set("POSITION", new Float32Array([
...vec(+H, -H),
...vec(-H, -H),
...vec(+H, +H),
...vec(-H, +H),
]));
// prettier-ignore
dataset.set("TEXCOORD_0", new Float32Array([
1, 1,
0, 1,
1, 0,
0, 0,
]));
const [nx, ny, nz] = new TgdVec3(vecX)
.normalize()
.cross(new TgdVec3(vecY).normalize());
// prettier-ignore
dataset.set("NORMAL", new Float32Array([
nx, ny, nz,
nx, ny, nz,
nx, ny, nz,
nx, ny, nz,
]));
super({
dataset,
drawMode: "TRIANGLE_STRIP",
});
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZ2VvbWV0cnkvcGxhbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUN6QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBRXhDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFTbkMsTUFBTSxPQUFPLGdCQUFpQixTQUFRLFdBQVc7SUFDN0MsWUFBWSxFQUNSLEtBQUssR0FBRyxDQUFDLEVBQ1QsS0FBSyxHQUFHLENBQUMsRUFDVCxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUNoQixJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUNTLEVBQUU7UUFDM0IsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFTLEVBQUUsQ0FBUyxFQUFnQixFQUFFO1lBQy9DLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUE7WUFDcEIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQTtZQUNwQixPQUFPO2dCQUNILEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBQzNCLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBQzNCLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7YUFDOUIsQ0FBQTtRQUNMLENBQUMsQ0FBQTtRQUNELE1BQU0sT0FBTyxHQUFHLElBQUksVUFBVSxDQUFDO1lBQzNCLFFBQVEsRUFBRSxNQUFNO1lBQ2hCLE1BQU0sRUFBRSxNQUFNO1lBQ2QsVUFBVSxFQUFFLE1BQU07U0FDckIsQ0FBQyxDQUFBO1FBQ0YsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFBO1FBQ2Isa0JBQWtCO1FBQ2xCLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLElBQUksWUFBWSxDQUFDO1lBQ3JDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ2QsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDZCxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNkLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ2pCLENBQUMsQ0FBQyxDQUFBO1FBQ0gsa0JBQWtCO1FBQ2xCLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLElBQUksWUFBWSxDQUFDO1lBQ3ZDLENBQUMsRUFBRSxDQUFDO1lBQ0osQ0FBQyxFQUFFLENBQUM7WUFDSixDQUFDLEVBQUUsQ0FBQztZQUNKLENBQUMsRUFBRSxDQUFDO1NBQ1AsQ0FBQyxDQUFDLENBQUE7UUFDSCxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUM7YUFDakMsU0FBUyxFQUFFO2FBQ1gsS0FBSyxDQUFDLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUE7UUFFekMsa0JBQWtCO1FBQ2xCLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLElBQUksWUFBWSxDQUFDO1lBQ25DLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtZQUNWLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtZQUNWLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtZQUNWLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtTQUNiLENBQUMsQ0FBQyxDQUFBO1FBQ0gsS0FBSyxDQUFDO1lBQ0YsT0FBTztZQUNQLFFBQVEsRUFBRSxnQkFBZ0I7U0FDN0IsQ0FBQyxDQUFBO0lBQ04sQ0FBQztDQUNKIn0=