/
ControllersEnvMap.tsx
41 lines (36 loc) 路 1.17 KB
/
ControllersEnvMap.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import { Canvas, useThree } from '@react-three/fiber'
import { XR, VRButton, Controllers } from '@react-three/xr'
import { PMREMGenerator, Texture } from 'three'
import { RGBELoader } from 'three-stdlib'
import { useEffect, useState } from 'react'
import EnvMap from '../assets/brown_photostudio_04_256.hdr'
function ControllersWithEnvMap() {
const renderer = useThree(({ gl }) => gl)
const [envMap, setEnvMap] = useState<Texture>()
useEffect(() => {
const generateEnvMap = async () => {
const rgbeLoader = new RGBELoader()
const dataTexture = await rgbeLoader.loadAsync(EnvMap)
const pmremGenerator = new PMREMGenerator(renderer)
pmremGenerator.compileEquirectangularShader()
const rt = pmremGenerator.fromEquirectangular(dataTexture)
const radianceMap = rt.texture
setEnvMap(radianceMap)
pmremGenerator.dispose()
}
generateEnvMap()
}, [renderer])
return <Controllers envMap={envMap} envMapIntensity={1} />
}
export default function () {
return (
<>
<VRButton onError={(e) => console.error(e)} />
<Canvas>
<XR>
<ControllersWithEnvMap />
</XR>
</Canvas>
</>
)
}