EnvironmentLocal.vue 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. <script setup lang="ts">
  2. import type { LoaderProto } from '@tresjs/core'
  3. import { useLoader, useTresContext } from '@tresjs/core'
  4. import { CubeReflectionMapping, type CubeTexture, CubeTextureLoader, EquirectangularReflectionMapping, type Texture } from 'three'
  5. import { RGBELoader } from 'three-stdlib'
  6. /* const files = ref(['/px.jpg', '/nx.jpg', '/py.jpg', '/ny.jpg', '/pz.jpg', '/nz.jpg']) */
  7. const files = ref('venice/venice_sunset_1k.hdr')
  8. const path = 'https://raw.githubusercontent.com/Tresjs/assets/main/textures/hdr/'
  9. const texture: Ref<Texture | CubeTexture | null> = ref(null)
  10. const { scene } = useTresContext()
  11. const isCubeMap = computed(() => Array.isArray((files as Ref<string[]>).value))
  12. const result = ref()
  13. const loader = computed(() => isCubeMap.value ? CubeTextureLoader as unknown as LoaderProto<CubeTexture | RGBELoader> : RGBELoader as unknown as LoaderProto<CubeTexture | RGBELoader>)
  14. result.value = await useLoader<CubeTexture | RGBELoader>(
  15. loader.value,
  16. isCubeMap.value ? [...unref(files)] : unref(files),
  17. (loader: any) => {
  18. if (path) { loader.setPath(unref(path)) }
  19. /* if (colorSpace) loader.colorSpace = colorSpace */
  20. },
  21. )
  22. if (result.value) {
  23. texture.value = result.value
  24. if (texture.value) {
  25. texture.value.mapping = isCubeMap.value ? CubeReflectionMapping : EquirectangularReflectionMapping
  26. scene.value.environment = texture.value
  27. scene.value.background = texture.value
  28. }
  29. }
  30. </script>
  31. <template>
  32. <TresMesh>
  33. <TresSphereGeometry args="[1, 64, 32]" />
  34. <TresMeshStandardMaterial :envMap="texture" />
  35. </TresMesh>
  36. </template>