效果
代码实现
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. innerHeightcamera. updateProjectionMatrix ( ) renderer. setSize ( window. innerWidth, window. innerHeight)
} ) function animate ( ) { controls. update ( ) renderer. render ( scene, camera) requestAnimationFrame ( animate)
}
animate ( )