You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在NextJS项目中如何正确使用React Three Fiber的DirectionalLightHelper?

在Next.js中正确使用DirectionalLightHelper的解决方案

方法1报错原因及修复

方法1出现TypeError: light is undefined,问题有两个:

  • 直接把ref对象传给directionalLightHelper的light属性,应该传ref.current
  • 组件首次渲染时ref.current还没绑定到灯光实例,必须加判断确保其存在

修复代码:

const dirLight = useRef<DirectionalLight>(null);

return (
  <Canvas>
    <directionalLight color="#005F00" intensity={1} ref={dirLight} />
    {dirLight.current && <directionalLightHelper light={dirLight.current} />}
  </Canvas>
);

方法2黑色线条问题解析及优化

你看到的黑色线条是Helper的默认极简状态,正常的DirectionalLightHelper应该是带颜色的箭头样式,问题出在这几点:

  • 没设置size参数,默认尺寸过小,视觉上像一条线
  • 灯光默认在原点且方向向下,Helper效果不明显
  • useHelper的颜色参数传递错误,第三个参数需传配置对象,不是直接传颜色字符串

优化后的Light组件:

import { useRef } from 'react';
import { directionalLight } from '@react-three/drei';
import { useHelper } from '@react-three/fiber';
import { DirectionalLightHelper } from 'three';

const Light = () => {
  const dirLight = useRef<DirectionalLight>(null);
  // 通过配置对象设置Helper的尺寸和颜色
  useHelper(dirLight, DirectionalLightHelper, { size: 5, color: 'red' });

  return (
    <directionalLight
      color="#005F00"
      intensity={1}
      ref={dirLight}
      position={[5, 5, 5]} // 调整灯光位置,让Helper箭头更清晰可见
    />
  );
};

调整后就能看到红色箭头样式的Helper,明确指示灯光的照射方向。另外要确保项目已安装@react-three/fiber和@react-three/drei依赖。

内容的提问来源于stack exchange,提问作者Zero

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 00:42:23