@tolokoban/tgd
Version:
ToloGameDev library for WebGL2
100 lines • 4.3 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 = "polar2xy" } = 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);
}
`,
};
}
/**
* The result of the function is a vec2 with:
* * x: the length
* * y: the angle
*/
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29vcmRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvZGUvY29vcmRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBOzs7R0FHRztBQUNILE1BQU0sVUFBVSxxQkFBcUIsQ0FDakMsVUFBNkQsRUFBRTtJQUUvRCxNQUFNLEVBQUUsSUFBSSxHQUFHLE9BQU8sRUFBRSxjQUFjLEdBQUcsZ0JBQWdCLEVBQUUsR0FBRyxPQUFPLENBQUE7SUFDckUsT0FBTztRQUNILENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxJQUFJOzJDQUNlLGNBQWM7O0NBRXhEO0tBQ0ksQ0FBQTtBQUNMLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUscUJBQXFCLENBQ2pDLFVBQW9FLEVBQUU7SUFFdEUsTUFBTSxFQUFFLElBQUksR0FBRyxPQUFPLEVBQUUscUJBQXFCLEdBQUcsdUJBQXVCLEVBQUUsR0FBRyxPQUFPLENBQUE7SUFDbkYsT0FBTztRQUNILENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxJQUFJOzhCQUNFLHFCQUFxQjs7Q0FFbEQ7S0FDSSxDQUFBO0FBQ0wsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsd0JBQXdCLENBQ3BDLFVBRUksRUFBRTtJQUVOLE1BQU0sRUFBRSxJQUFJLEdBQUcsVUFBVSxFQUFFLEdBQUcsT0FBTyxDQUFBO0lBQ3JDLE9BQU87UUFDSCxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsSUFBSTs7Ozs7O0NBTTNCO0tBQ0ksQ0FBQTtBQUNMLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsd0JBQXdCLENBQ3BDLFVBRUksRUFBRTtJQUVOLE1BQU0sRUFBRSxJQUFJLEdBQUcsVUFBVSxFQUFFLEdBQUcsT0FBTyxDQUFBO0lBQ3JDLE9BQU87UUFDSCxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsSUFBSTs7Ozs7Ozs7Q0FRM0I7S0FDSSxDQUFBO0FBQ0wsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsd0JBQXdCLENBQ3BDLFVBQW9FLEVBQUU7SUFFdEUsTUFBTSxFQUFFLElBQUksR0FBRyxVQUFVLEVBQUUscUJBQXFCLEdBQUcsdUJBQXVCLEVBQUUsR0FBRyxPQUFPLENBQUE7SUFDdEYsT0FBTztRQUNILENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxJQUFJOzs7Ozs7OzhCQU9FLHFCQUFxQjs7Q0FFbEQ7S0FDSSxDQUFBO0FBQ0wsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsd0JBQXdCLENBQ3BDLFVBQTZELEVBQUU7SUFFL0QsTUFBTSxFQUFFLElBQUksR0FBRyxVQUFVLEVBQUUsY0FBYyxHQUFHLGdCQUFnQixFQUFFLEdBQUcsT0FBTyxDQUFBO0lBQ3hFLE9BQU87UUFDSCxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsSUFBSTs4Q0FDa0IsY0FBYzs7Ozs7O0NBTTNEO0tBQ0ksQ0FBQTtBQUNMLENBQUMifQ==