3D全景-环境光
import * as THREE from 'three'
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls'
import gsap from 'gsap'
import * as dat from 'dat.gui'
import { RGBELoader } from 'three/examples/jsm/loaders/RGBELoader'
const gui = new dat.GUI()
const scene = new THREE.Scene()
const camera = new THREE.PerspectiveCamera(
75,
window.innerWidth / window.innerHeight,
0.1,
1000
)
camera.position.set(0, 0, 5)
scene.add(camera)
const loadingManager = new THREE.LoadingManager(
() => {
console.log('load');
},
(url, itemsLoaded, itemsTotal) => {
console.log('onprogress');
console.log(url);
console.log(itemsLoaded);
console.log(itemsTotal);
console.log('纹理图片的加载进度:' + (itemsLoaded / itemsTotal * 100).toFixed(2) + '%');
},
() => {
console.log('loaded');
},
(err) => {
console.log(err);
}
)
console.log(loadingManager);
loadingManager.onStart = function () {
console.log('loading start');
}
loadingManager.onError = function () {
console.log('loading error');
}
const TextureLoader = new THREE.TextureLoader(loadingManager)
const material = new THREE.MeshStandardMaterial({
metalness: 1,
roughness: 0,
color: 0xffffff
})
const rgbeLoader = new RGBELoader().setPath('textures/hdr/')
rgbeLoader.loadAsync('003.hdr').then((texture) => {
texture.mapping = THREE.EquirectangularReflectionMapping
scene.background = texture
scene.environment = texture
})
const sphereGeometry = new THREE.SphereBufferGeometry(1, 64, 64)
const sphere = new THREE.Mesh(sphereGeometry, material)
scene.add(sphere)
const ambientLight = new THREE.AmbientLight(0xffffff, 0.5);
scene.add(ambientLight)
const pointLight = new THREE.PointLight(0xffffff, 0.5);
pointLight.position.set(2, 3, 4);
scene.add(pointLight);
const renderer = new THREE.WebGL1Renderer()
renderer.setSize(window.innerWidth, window.innerHeight)
window.addEventListener('resize', () => {
camera.aspect = window.innerWidth / window.innerHeight
camera.updateProjectionMatrix()
renderer.setSize(window.innerWidth, window.innerHeight)
renderer.setPixelRatio(window.devicePixelRatio)
})
window.addEventListener('dblclick', () => {
const fullscreenElement = document.fullscreenElement || document.webkitFullscreenElement
if (!fullscreenElement) {
if (renderer.domElement.requestFullscreen) {
renderer.domElement.requestFullscreen()
} else if (renderer.domElement.webkitRequestFullscreen) {
renderer.domElement.webkitRequestFullscreen()
}
} else {
if (document.exitFullscreen) {
document.exitFullscreen()
} else if (document.webkitExitFullscreen) {
document.webkitExitFullscreen()
}
}
})
document.body.appendChild(renderer.domElement)
const controls = new OrbitControls(camera, renderer.domElement)
controls.enableDamping = true
function animate (t) {
controls.update()
requestAnimationFrame(animate)
renderer.render(scene, camera)
}
animate()