diff --git a/README.md b/README.md index 4497ef732..5cbcfd47b 100644 --- a/README.md +++ b/README.md @@ -221,6 +221,8 @@ type Props = Omit & { frames?: number /** Resolution of the FBO, 256 */ resolution?: number + /** Optional environment map for functional use */ + envMap?: THREE.Texture } ``` diff --git a/src/core/OrthographicCamera.tsx b/src/core/OrthographicCamera.tsx index 30722ff9e..c5758052d 100644 --- a/src/core/OrthographicCamera.tsx +++ b/src/core/OrthographicCamera.tsx @@ -18,10 +18,12 @@ type Props = Omit & { frames?: number /** Resolution of the FBO, 256 */ resolution?: number + /** Optional environment map for functional use */ + envMap?: THREE.Texture } export const OrthographicCamera = React.forwardRef( - ({ resolution = 256, frames = Infinity, children, makeDefault, ...props }: Props, ref) => { + ({ envMap, resolution = 256, frames = Infinity, children, makeDefault, ...props }: Props, ref) => { const set = useThree(({ set }) => set) const camera = useThree(({ camera }) => camera) const size = useThree(({ size }) => size) @@ -50,14 +52,19 @@ export const OrthographicCamera = React.forwardRef( }, [cameraRef, makeDefault, set]) let count = 0 + let oldEnvMap: THREE.Color | THREE.Texture | null = null const functional = isFunction(children) useFrame((state) => { if (functional && (frames === Infinity || count < frames)) { groupRef.current.visible = false state.gl.setRenderTarget(fbo) + oldEnvMap = state.scene.background + if (envMap) state.scene.background = envMap state.gl.render(state.scene, cameraRef.current) + state.scene.background = oldEnvMap state.gl.setRenderTarget(null) groupRef.current.visible = true + count++ } }) diff --git a/src/core/PerspectiveCamera.tsx b/src/core/PerspectiveCamera.tsx index bd40f67de..d79704512 100644 --- a/src/core/PerspectiveCamera.tsx +++ b/src/core/PerspectiveCamera.tsx @@ -18,10 +18,12 @@ type Props = Omit & { frames?: number /** Resolution of the FBO, 256 */ resolution?: number + /** Optional environment map for functional use */ + envMap?: THREE.Texture } export const PerspectiveCamera = React.forwardRef( - ({ resolution = 256, frames = Infinity, makeDefault, children, ...props }: Props, ref) => { + ({ envMap, resolution = 256, frames = Infinity, makeDefault, children, ...props }: Props, ref) => { const set = useThree(({ set }) => set) const camera = useThree(({ camera }) => camera) const size = useThree(({ size }) => size) @@ -40,14 +42,19 @@ export const PerspectiveCamera = React.forwardRef( }) let count = 0 + let oldEnvMap: THREE.Color | THREE.Texture | null = null const functional = isFunction(children) useFrame((state) => { if (functional && (frames === Infinity || count < frames)) { groupRef.current.visible = false state.gl.setRenderTarget(fbo) + oldEnvMap = state.scene.background + if (envMap) state.scene.background = envMap state.gl.render(state.scene, cameraRef.current) + state.scene.background = oldEnvMap state.gl.setRenderTarget(null) groupRef.current.visible = true + count++ } }) diff --git a/src/core/Text3D.tsx b/src/core/Text3D.tsx index 8bab23aca..69061a26e 100644 --- a/src/core/Text3D.tsx +++ b/src/core/Text3D.tsx @@ -100,6 +100,7 @@ export const Text3D = React.forwardRef< bevelThickness, bevelSize, bevelEnabled, + bevelSegments, bevelOffset, curveSegments, letterSpacing,