gpu-curtains
Version:
gpu-curtains is a 3D WebGPU rendering engine. It can be used as a standalone 3D engine, but also includes extra classes focused on mapping 3d objects to DOM elements; It allows users to synchronize values such as position, sizing, or scale between them.
43 lines (42 loc) • 1.39 kB
JavaScript
import { Vec3 } from "./Vec3.mjs";
//#region src/math/color-utils.ts
/**
* Convert a color float component from sRGB to linear space.
* @param c - color float component to convert.
* @returns - converted color float component.
*/
function sRGBToLinearFloat(c) {
return c < .04045 ? c * .0773993808 : Math.pow(c * .9478672986 + .0521327014, 2.4);
}
/**
* Convert a color float component from linear to sRGB space.
* @param c - color float component to convert.
* @returns - converted color float component.
*/
function linearTosRGBFloat(c) {
return c < .0031308 ? c * 12.92 : 1.055 * Math.pow(c, .41666) - .055;
}
/**
* Convert a color {@link Vec3} from sRGB to linear space.
* @param vector - color {@link Vec3} to convert.
* @returns - converted color {@link Vec3}.
*/
function sRGBToLinear(vector = new Vec3()) {
vector.x = sRGBToLinearFloat(vector.x);
vector.y = sRGBToLinearFloat(vector.y);
vector.z = sRGBToLinearFloat(vector.z);
return vector;
}
/**
* Convert a color {@link Vec3} from linear to sRGB space.
* @param vector - color {@link Vec3} to convert.
* @returns - converted color {@link Vec3}.
*/
function linearTosRGB(vector = new Vec3()) {
vector.x = linearTosRGBFloat(vector.x);
vector.y = linearTosRGBFloat(vector.y);
vector.z = linearTosRGBFloat(vector.z);
return vector;
}
//#endregion
export { linearTosRGB, linearTosRGBFloat, sRGBToLinear, sRGBToLinearFloat };