//创建纹理加载器
let textureLoader = new THREE.TextureLoader()
//加载纹理
let texture = textureLoader.load('./textures/parvers/worn_patterned_pavers_diff_4k.jpg')
// let texture = textureLoader.load('./textures/covers/Sewer-0793.jpg')
//设置sRGB纹理的颜色空间
texture.colorSpace = THREE.SRGBColorSpace
gui.add(texture, 'colorSpace', {
sRGB: THREE.SRGBColorSpace,
Linear: THREE.LinearSRGBColorSpace
}).onChange((val) => {
console.log('change',val)
console.log(texture)
console.log(texture.colorSpace)
texture.needsUpdate = true
})
输出的内容显示,texture对象的colorSpace已经改变了,但是页面没有重新渲染。
即便在使用后,texture.needsUpdate = true 后,仍然没有效果。
值得注意的是,当我不设置texture的颜色空间,即texture.colorSpace = THREE.LinearSRBColorSpace 或者 THREE.NoColorSpace的时候,可以实现页面从linear-srgb到srgb的转换,但是不能实现srgb到linear-srgb的转换。
这是什么情况导致的?该如何实现GUI控制纹理的颜色空间的转变?
补充1:
根据官方文档,只要改变颜色空间,就需要将材质的needsUpdate设置为true就可以重新编译了,但是,即使我在onchange中的回调函数中加上material.needsUpdate = true也并没有什么改变