效果
代码实现
import './style.css'
import * as THREE from 'three'
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js'
import { RGBELoader } from "three/examples/jsm/loaders/RGBELoader.js"
import { GUI } from 'three/examples/jsm/libs/lil-gui.module.min.js'
const scene = new THREE.Scene()
const axesHelper = new THREE.AxesHelper(10)
scene.add(axesHelper)
const camera = new THREE.PerspectiveCamera(
45,
window.innerWidth / window.innerHeight,
0.1,
1000
)
camera.position.x = 8
camera.position.y = 8
camera.position.z = 8
camera.lookAt(0, 0, 0)
const renderer = new THREE.WebGLRenderer()
renderer.setSize(window.innerWidth, window.innerHeight)
document.body.appendChild(renderer.domElement)
const controls = new OrbitControls(camera, renderer.domElement)
controls.enableDamping = true
controls.dampingFactor = 0.05
controls.autoRotate = false
const plan = new THREE.PlaneGeometry(5, 5)
let textureLoader = new THREE.TextureLoader()
let texture = textureLoader.load('./.....xxx.png')
texture.colorSpace = THREE.SRGBColorSpace
let aoMap = textureLoader.load('./.....xxx.png')
let alphaMap = textureLoader.load('./.....xxx.png')
let lightMap = textureLoader.load('././.....xxx.png')
let specularMap = textureLoader.load('././.....xxx.png')
let rgbeloader = new RGBELoader()
rgbeloader.load('././.....xxx.hdr', (envMap) => {
envMap.mapping = THREE.EquirectangularReflectionMapping;
scene.background = envMap
scene.environment = envMap
material.envMap = envMap
})
const material = new THREE.MeshBasicMaterial({
color: new THREE.Color('gray'),
side: THREE.DoubleSide,
map: texture,
aoMap,
aoMapIntensity: 1,
transparent: true,
specularMap,
reflectivity: 0.5
})
const cube = new THREE.Mesh(plan, material)
scene.add(cube)
let gui = new GUI()
gui.add(material, 'aoMapIntensity').min(0).max(1).name('oa贴图')
gui.add(material, 'reflectivity').min(0).max(1).name('高光贴图反光部分反光度')
window.addEventListener('resize', () => {
camera.aspect = window.innerWidth / window.innerHeight
camera.updateProjectionMatrix()
renderer.setSize(window.innerWidth, window.innerHeight)
})
function animate() {
controls.update()
renderer.render(scene, camera)
requestAnimationFrame(animate)
}
animate()