@tolokoban/tgd
Version:
ToloGameDev library for WebGL2
95 lines • 4.17 kB
JavaScript
/**
* Convert uv coords ([0.0, +1.0]) into xy coords ([-1.0, +1.0]).
* Requires uniform `uniAspectRatio`.
*/
export function tgdCodeFunction_uv2xy(options = {}) {
const { name = "uv2xy", uniAspectRatio = "uniAspectRatio" } = options;
return {
[name]: `vec2 ${name}(vec2 uv) {
return 2.0 * (uv - vec2(0.5)) * vec2(${uniAspectRatio}, 1.0);
}
`,
};
}
/**
* Convert xy coords ([-1.0, +1.0]) into uv coords ([0.0, +1.0]) .
* Requires uniform `uniAspectRatioInverse`.
*/
export function tgdCodeFunction_xy2uv(options = {}) {
const { name = "xy2uv", uniAspectRatioInverse = "uniAspectRatioInverse" } = options;
return {
[name]: `vec2 ${name}(vec2 xy) {
return (0.5 * xy * vec2(${uniAspectRatioInverse}, 1.0)) + vec2(0.5);
}
`,
};
}
/**
* Convert othogonal coords into polar coords.
* The function will return a vec2 with the length as first component,
* and the angle as second.
*/
export function tgdCodeFunction_xy2polar(options) {
const { name = "xy2polar" } = options;
return {
[name]: `vec2 ${name}(vec2 xy) {
return vec2(
length(xy),
atan(xy.y, xy.x)
);
}
`,
};
}
/**
* Reverse function of `xy2polar`.
* @see tgdCodeFunction_xy2polar
*/
export function tgdCodeFunction_polar2xy(options) {
const { name = "polar2uv" } = options;
return {
[name]: `vec2 ≈${name}(vec2 polar) {
float r = polar.x;
float a = polar.y;
return vec2(
r * cos(a),
r * sin(a)
);
}
`,
};
}
/**
* Reverse function of `xy2polar`.
* Requires uniform `uniAspectRatioInverse`.
* @see tgdCodeFunction_xy2polar
*/
export function tgdCodeFunction_polar2uv(options = {}) {
const { name = "polar2uv", uniAspectRatioInverse = "uniAspectRatioInverse", } = options;
return {
[name]: `vec2 ${name}(vec2 polar) {
float r = polar.x;
float a = polar.y;
vec2 xy = vec2(
r * cos(a),
r * sin(a)
);
return (0.5 * xy * vec2(${uniAspectRatioInverse}, 1.0)) + vec2(0.5);
}
`,
};
}
export function tgdCodeFunction_uv2polar(options = {}) {
const { name = "uv2polar", uniAspectRatio = "uniAspectRatio" } = options;
return {
[name]: `vec2 ${name}(vec2 uv) {
vec2 xy = 2.0 * (uv - vec2(0.5)) * vec2(${uniAspectRatio}, 1.0);
return vec2(
length(xy),
atan(xy.y, xy.x)
);
}
`,
};
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29vcmRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvZGUvY29vcmRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBOzs7R0FHRztBQUNILE1BQU0sVUFBVSxxQkFBcUIsQ0FDakMsVUFBNkQsRUFBRTtJQUUvRCxNQUFNLEVBQUUsSUFBSSxHQUFHLE9BQU8sRUFBRSxjQUFjLEdBQUcsZ0JBQWdCLEVBQUUsR0FBRyxPQUFPLENBQUE7SUFDckUsT0FBTztRQUNILENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxJQUFJOzJDQUNlLGNBQWM7O0NBRXhEO0tBQ0ksQ0FBQTtBQUNMLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUscUJBQXFCLENBQ2pDLFVBQW9FLEVBQUU7SUFFdEUsTUFBTSxFQUFFLElBQUksR0FBRyxPQUFPLEVBQUUscUJBQXFCLEdBQUcsdUJBQXVCLEVBQUUsR0FDckUsT0FBTyxDQUFBO0lBQ1gsT0FBTztRQUNILENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxJQUFJOzhCQUNFLHFCQUFxQjs7Q0FFbEQ7S0FDSSxDQUFBO0FBQ0wsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsd0JBQXdCLENBQUMsT0FFeEM7SUFDRyxNQUFNLEVBQUUsSUFBSSxHQUFHLFVBQVUsRUFBRSxHQUFHLE9BQU8sQ0FBQTtJQUNyQyxPQUFPO1FBQ0gsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLElBQUk7Ozs7OztDQU0zQjtLQUNJLENBQUE7QUFDTCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLHdCQUF3QixDQUFDLE9BRXhDO0lBQ0csTUFBTSxFQUFFLElBQUksR0FBRyxVQUFVLEVBQUUsR0FBRyxPQUFPLENBQUE7SUFDckMsT0FBTztRQUNILENBQUMsSUFBSSxDQUFDLEVBQUUsU0FBUyxJQUFJOzs7Ozs7OztDQVE1QjtLQUNJLENBQUE7QUFDTCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSx3QkFBd0IsQ0FDcEMsVUFBb0UsRUFBRTtJQUV0RSxNQUFNLEVBQ0YsSUFBSSxHQUFHLFVBQVUsRUFDakIscUJBQXFCLEdBQUcsdUJBQXVCLEdBQ2xELEdBQUcsT0FBTyxDQUFBO0lBQ1gsT0FBTztRQUNILENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxJQUFJOzs7Ozs7OzhCQU9FLHFCQUFxQjs7Q0FFbEQ7S0FDSSxDQUFBO0FBQ0wsQ0FBQztBQUVELE1BQU0sVUFBVSx3QkFBd0IsQ0FDcEMsVUFBNkQsRUFBRTtJQUUvRCxNQUFNLEVBQUUsSUFBSSxHQUFHLFVBQVUsRUFBRSxjQUFjLEdBQUcsZ0JBQWdCLEVBQUUsR0FBRyxPQUFPLENBQUE7SUFDeEUsT0FBTztRQUNILENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxJQUFJOzhDQUNrQixjQUFjOzs7Ozs7Q0FNM0Q7S0FDSSxDQUFBO0FBQ0wsQ0FBQyJ9