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

Three.js引入FXAAShader报错:Uncaught ReferenceError: THREE is not defined

解决Three.js FXAAShader 报 "THREE is not defined" 错误

问题根源

你导入的FXAAShader来自three/examples/js/shaders/FXAAShader,这个路径下的文件是非ES模块版本,内部直接依赖全局的THREE对象,但你的项目用的是ES模块导入(import * as THREE from 'three'),全局环境中并没有挂载THREE,所以触发了引用错误。

直接解决方案

将FXAAShader的导入路径替换为jsm目录下的ES模块版本:

修改前导入代码:

import { FXAAShader} from 'three/examples/js/shaders/FXAAShader'

修改后:

import { FXAAShader } from 'three/examples/jsm/shaders/FXAAShader.js';

补充说明

  • three.js的examples/js/目录下的脚本是为传统全局引入场景设计的,会直接使用window.THREE;而examples/jsm/目录下的脚本是专门适配ES模块的,内部会通过import语句从three核心包引入所需对象(比如THREE.Vector2),不会依赖全局变量。
  • 修正导入后,你原来创建FXAAShaderPass的代码可以正常运行,建议在窗口resize时同步更新分辨率参数,避免窗口大小变化后抗锯齿失效:
window.addEventListener('resize', () => {
  const pixelRatio = Math.min(window.devicePixelRatio, 2);
  fxaaPass.material.uniforms.resolution.value.x = 1 / (window.innerWidth * pixelRatio);
  fxaaPass.material.uniforms.resolution.value.y = 1 / (window.innerHeight * pixelRatio);
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 01:35:28