UNPKG

@tolokoban/tgd

Version:

ToloGameDev library for WebGL2

95 lines 4.17 kB
/** * 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