
 在 ThreeJS 中,纹理的 colorSpace 属性用于定义文里的颜色空间。
 颜色空间是一个用于描述颜色的数学模型,在现实生活中,人眼可以观察到无数种颜色,而颜色空间就是用来描述这些颜色的一个方法,不同的颜色空间可以表示不同的色值范围和精度的颜色。
# ThreeJS: 颜色空间类型
 ThreeJS 源码中定义了如下几种颜色空间类型,
| export const NoColorSpace: ""; | |
| export const SRGBColorSpace: "srgb"; | |
| export const LinearSRGBColorSpace: "srgb-linear"; | |
| export const DisplayP3ColorSpace: "display-p3"; | |
| export const LinearDisplayP3ColorSpace = "display-p3-linear"; | |
| export type ColorSpace = | |
| | typeof NoColorSpace | |
| | typeof SRGBColorSpace | |
| | typeof LinearSRGBColorSpace | |
| | typeof DisplayP3ColorSpace | |
| | typeof LinearDisplayP3ColorSpace; | 
 其中:
- NoColorSpace:没有应用任何的颜色空间,纹理的颜色数据会被原样使用,这个选项通常用于已经处于需要的颜色空间中的纹理,或者那些不依赖于颜色空间的特定用途; 
- SRGBColorSpace:此颜色空间中,颜色数据以 sRGB 格式存储。sRGC 是一个 RGB 标准,它试图将色彩的表现和人眼感知到的颜色更好地匹配。相对于线性颜色空间,sRGB 颜色空间在暗区提供了更多的颜色级别。使用此颜色空间时,需要注意图像的颜色可能会被转换为非线性的 sRGB 格式。 
- LinearSRGBColorSpace:这也是一个以 sRGB 格式存储颜色数据的颜色空间,但是颜色数据被当做线性数据处理。在进行计算和处理时,这种颜色空间可以提供更精确的结果。然而,需要注意的是,使用此颜色空间可能会使得颜色在暗区看起来过于暗。 
 注意点:如果纹理已经被一个材料使用,然后改变了纹理的颜色空间类型,那么就需要将 Material.needsUpdate 设置为 true,来使材料重新编译。
# ThreeJS: 修改颜色空间
| //TOOD: 纹理贴图加载器 | |
| const textureLoader = new THREE.TextureLoader(); | |
| const diffuseMap = textureLoader.load('images/dry_riverbed_rock_diff_1k.jpg');// 颜色纹理 | |
| // diffuseMap.colorSpace = THREE.SRGBColorSpace; | |
| // diffuseMap.colorSpace = THREE.LinearSRGBColorSpace; | |
| diffuseMap.colorSpace = THREE.NoColorSpace; | 
