Skip to content

纹理的颜色空间

代码

js
import * as THREE from 'three'
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js'
import { GUI } from 'three/examples/jsm/libs/lil-gui.module.min.js';
import { RGBELoader } from 'three/examples/jsm/loaders/RGBELoader.js';

const scene = new THREE.Scene();

const camera = new THREE.PerspectiveCamera(
  45,
  window.innerWidth / window.innerHeight,
  0.1,
  1000
)

const renderer = new THREE.WebGLRenderer()
renderer.setSize(window.innerWidth, window.innerHeight)
document.body.appendChild(renderer.domElement)


camera.position.z = 5;
camera.position.y = 2;
camera.position.x = 2;
camera.lookAt(0, 0, 0)

const axesHelper = new THREE.AxesHelper(5);
scene.add(axesHelper);


const controls = new OrbitControls(camera, renderer.domElement);

controls.enableDamping = true;

controls.dampingFactor = 0.05;

function animate() {
  requestAnimationFrame(animate)
  controls.update()
  renderer.render(scene, camera)
}

animate()

window.addEventListener('resize', () => {
  renderer.setSize(window.innerWidth, innerHeight)
  camera.aspect = window.innerWidth / window.innerHeight
  camera.updateProjectionMatrix()
})

let eventObj = {
  Fullscreen: function () {
    document.body.requestFullscreen()
  },
  ExitFullscreen: function () {
    document.exitFullscreen()
  }
}


const gui = new GUI()
gui.add(eventObj, 'Fullscreen').name('全屏')
gui.add(eventObj, 'ExitFullscreen').name('退出全屏')

let planeGeometry = new THREE.PlaneGeometry(1, 1)

let textureLoader = new THREE.TextureLoader()
let texture = textureLoader.load('./texture/watercover/CityNewYork002_COL_VAR1_1K.png')

// RGB空间
texture.colorSpace = THREE.SRGBColorSpace
// 线性空间 默认为线性空间
// texture.colorSpace = THREE.LinearSRGBColorSpace

let aoMap = textureLoader.load('./texture/watercover/CityNewYork002_AO_1K.jpg')


let alphaMap = textureLoader.load('./texture/door/height.jpg')

let lightMap = textureLoader.load('./texture/colors.png')

let specularMap = textureLoader.load('./texture/watercover/CityNewYork002_GLOSS_1K.jpg')

let rgbLoader = new RGBELoader()
rgbLoader.load('./texture/Alex_Hart-Nature_Lab_Bones_2k.hdr', (envMap) => {

  envMap.mapping = THREE.EquirectangularReflectionMapping

  scene.background = envMap
  scene.environment = envMap

  planeMaterial.envMap = envMap
})


let planeMaterial = new THREE.MeshBasicMaterial({
  color: 0xffffff,
  side: THREE.DoubleSide,
  transparent: true,
  aoMap: aoMap,
  aoMapIntensity: 1,
  reflectivity: 0.3,
  specularMap: specularMap,
})


planeMaterial.map = texture

let plane = new THREE.Mesh(planeGeometry, planeMaterial)

scene.add(plane)


gui.add(planeMaterial, 'aoMapIntensity').min(0).max(1).name('ao强度')

// 设置纹理的颜色空间
gui.add(texture, 'colorSpace', {
  SRGB: THREE.SRGBColorSpace,
  Linear: THREE.LinearSRGBColorSpace
}).onChange(() => {
  texture.needsUpdate = true
})

Released under the MIT License.