代码拉取完成,页面将自动刷新
/*
* @Description:
* @Version: 1.668
* @Autor: 地虎降天龙
* @Date: 2024-04-30 09:23:53
* @LastEditors: 地虎降天龙
* @LastEditTime: 2025-09-23 16:43:28
*/
import { useTres } from '@tresjs/core'
import * as THREE from 'three'
import { HalfFloatType, Fog, FogExp2, WebGLCubeRenderTarget } from 'three'
import type { Ref } from 'vue'
import { onBeforeUnmount, ref,watch } from 'vue'
export type CubeCameraOptions = {
/** Resolution of the FBO, 256 */
resolution?: number
/** Camera near, 0.1 */
near?: number
/** Camera far, 1000 */
far?: number
/** Custom environment map that is temporarily set as the scenes background */
envMap?: THREE.Texture
/** Custom fog that is temporarily set as the scenes fog */
fog?: Fog | FogExp2
}
export function useCubeCamera({ resolution = 256, near = 0.1, far = 1000, envMap, fog }: CubeCameraOptions = {}) {
const { renderer, scene } = useTres()
const fbo: Ref<WebGLCubeRenderTarget | null> = ref(null)
const resolutionR = ref(resolution)
const nearR = ref(near)
const farR = ref(far)
const camera: Ref<THREE.CubeCamera | null> = ref(null)
watch(()=>resolutionR, (r) => {
fbo.value?.dispose()
fbo.value = new WebGLCubeRenderTarget(r.value)
fbo.value.texture.type = HalfFloatType
}, { immediate: true })
watch([nearR, farR, fbo], ([n, fa, fb]) => {
if (fb) {
camera.value = new THREE.CubeCamera(n, fa, fb)
}
}, { immediate: true })
onBeforeUnmount(() => {
fbo.value?.dispose()
})
let originalFog
let originalBackground
const update = () => {
originalFog = scene.value.fog
originalBackground = scene.value.background
scene.value.background = envMap || originalBackground
scene.value.fog = fog || originalFog
camera.value?.update(renderer, scene.value)
scene.value.fog = originalFog
scene.value.background = originalBackground
}
return {
fbo,
camera,
update,
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。