35 lines
1.2 KiB
JavaScript
35 lines
1.2 KiB
JavaScript
'use strict';
|
|
|
|
"use strict";
|
|
function applyProjectiveTransformationToPlane(width, height, geometry, transformationMatrix) {
|
|
const buffer = geometry.buffers[0];
|
|
const vertices = buffer.data;
|
|
const { verticesX, verticesY } = geometry;
|
|
const sizeX = width / (verticesX - 1);
|
|
const sizeY = height / (verticesY - 1);
|
|
let index = 0;
|
|
const a00 = transformationMatrix[0];
|
|
const a01 = transformationMatrix[1];
|
|
const a02 = transformationMatrix[2];
|
|
const a10 = transformationMatrix[3];
|
|
const a11 = transformationMatrix[4];
|
|
const a12 = transformationMatrix[5];
|
|
const a20 = transformationMatrix[6];
|
|
const a21 = transformationMatrix[7];
|
|
const a22 = transformationMatrix[8];
|
|
for (let i = 0; i < vertices.length; i += 2) {
|
|
const x = index % verticesX * sizeX;
|
|
const y = (index / verticesX | 0) * sizeY;
|
|
const newX = a00 * x + a01 * y + a02;
|
|
const newY = a10 * x + a11 * y + a12;
|
|
const w = a20 * x + a21 * y + a22;
|
|
vertices[i] = newX / w;
|
|
vertices[i + 1] = newY / w;
|
|
index++;
|
|
}
|
|
buffer.update();
|
|
}
|
|
|
|
exports.applyProjectiveTransformationToPlane = applyProjectiveTransformationToPlane;
|
|
//# sourceMappingURL=applyProjectiveTransformationToPlane.js.map
|