让我先提出我的问题,然后分享相关细节:是否有一种方法可以在ReactJS中使用/load(修复解析错误)WebGL着色器?是否有可用的装载机?
经过几个小时的努力,在谷歌上寻找一种能够使用着色器文件(即顶点和碎片着色器)的方法,我还没有找到结论性的解决方案。
当我在ReactJS应用程序中执行此操作时:
require('../shaders/particle.vert')
import particleVert from '../shaders/particle.vert'
我得到这个错误:
ERROR in ./src/particles/src/shaders/particle.vert 3:10
Module parse failed: Unexpected token (3:10)
You may need an appropriate loader to handle this file type.
这是我在react-app代码中使用这些着色器的方式:
const material = new THREE.RawShaderMaterial({
uniforms,
vertexShader: glslify(require('../shaders/particle.vert')),
fragmentShader: glslify(require('../shaders/particle.frag')),
// vertexShader: glslify(particleVert),
// fragmentShader: glslify(particleFrag),
depthTest: false,
transparent: true,
// blending: THREE.AdditiveBlending
});
以下是显示问题的整个日志的屏幕截图:
4条答案
按热度按时间vbkedwbf1#
我认为你已经超出了create-react-app为你设置的范围。这意味着是时候弹出应用程序并自定义其构建过程了。
运行:
现在你需要配置webpack来允许导入frag和vert文件作为字符串。这是通过webpack's 'raw-loader'完成的
现在,在根目录下的webpack.config.js文件中添加一些配置行。你在找它定义
module: { rules: { /*...*/ } }
的地方。将以下规则添加到数组中:test
是一个在文件名上运行的正则表达式,所以这意味着任何以.vert
或.frag
结尾的文件都应该使用raw-loader
。5jvtdoz22#
react-three-fiber/drei是three.js的rawshadermaterial的轻量级 Package 器的最佳选择。以下是文档:
https://docs.pmnd.rs/drei/shaders/shader-material
文档非常简单,你仍然可以用glsify导入外部文件
fnatzsnv3#
如果什么都不起作用,请尝试将其作为字符串常量导入
ttisahbt4#
更新:
注意:该项目必须被弹出。查看更多详情https://webpack.js.org/guides/asset-modules/: