Ai
263 Star 4K Fork 923

ICEGL/icegl-three-vue-tres

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
useCubeCamera.ts 1.88 KB
一键复制 编辑 原始数据 按行查看 历史
/*
* @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,
}
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
JavaScript
1
https://gitee.com/ice-gl/icegl-three-vue-tres.git
git@gitee.com:ice-gl/icegl-three-vue-tres.git
ice-gl
icegl-three-vue-tres
icegl-three-vue-tres
master

搜索帮助