gpt4 book ai didi

three.js - @react-three/纤维 : How do I create a helper for a shadow camera?

转载 作者:行者123 更新时间:2023-12-05 01:57:36 27 4
gpt4 key购买 nike

所以我习惯这样设置助手:

useHelper(sLightRef, THREE.SpotLightHelper);

return <spotLight
castShadow
ref={sLightRef}
position={[0, 2, 2]}
args={["#fff", 0.4, 10, Math.PI * 0.3]}
></spotLight>

这将在 SpotLight 对象上创建一个助手。

我不明白的是如何在 SpotLight 的阴影相机上创建一个。 (spotlight.shadow.camera) 我们无法为其分配 ref(),因为它不在我的返回语句中。它是在 SpotLight 组件内部创建的。

在普通的 Three.js 中,这很简单:

const helper = new THREE.CameraHelper(spotlight.shadow.camera);
scene.add(helper);

我将如何在 react-three-fiber 中执行此操作?有什么明显的我想念的吗?谢谢。

最佳答案

我试了一下,但找不到一个干净的解决方案。这就是为什么我制作了自己的钩子(Hook),它的构建类似于 useHelper 钩子(Hook)。

// Components==============
import { useFrame, useThree } from '@react-three/fiber';
import React, { useRef } from 'react';
import { CameraHelper, Light } from 'three';
// =========================

export default function useShadowHelper(
ref: React.MutableRefObject<Light | undefined>
) {
const helper = useRef<CameraHelper>();
const scene = useThree((state) => state.scene);

React.useEffect(() => {
if (!ref.current) return;

helper.current = new CameraHelper(ref.current?.shadow.camera);
if (helper.current) {
scene.add(helper.current);
}

return () => {
if (helper.current) {
scene.remove(helper.current);
}
};
}, [helper.current?.uuid, ref.current]);

useFrame(() => {
if (helper.current?.update) {
helper.current.update();
}
});
}

关于three.js - @react-three/纤维 : How do I create a helper for a shadow camera?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69096623/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com