Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Three.js 在THREEJS/GLSL中照明粒子系统_Three.js_Glsl_Particle System_Particles - Fatal编程技术网

Three.js 在THREEJS/GLSL中照明粒子系统

Three.js 在THREEJS/GLSL中照明粒子系统,three.js,glsl,particle-system,particles,Three.js,Glsl,Particle System,Particles,我制作了一个带有缓冲几何体的粒子系统。我想让粒子接收光。这很难(不可能?)因为几何体实际上没有面对光的面 我主要是在我创建的着色器中使用它。我刚刚用3JS创建了几何体 粒子不在世界空间吗?它们只在相机空间吗 什么是用于照明粒子的简单GLSL片段着色器方程式?它取决于用于粒子的材质类型。如果使用shaderMaterial并编写自己的fragmentshader,则必须在着色器代码中自行实现照明。例如,要使靠近光源的粒子变亮,只需通过每个粒子与灯光位置之间的距离使其颜色变亮: vec3 light

我制作了一个带有缓冲几何体的粒子系统。我想让粒子接收光。这很难(不可能?)因为几何体实际上没有面对光的面

我主要是在我创建的着色器中使用它。我刚刚用3JS创建了几何体

粒子不在世界空间吗?它们只在相机空间吗


什么是用于照明粒子的简单GLSL片段着色器方程式?

它取决于用于粒子的材质类型。如果使用shaderMaterial并编写自己的fragmentshader,则必须在着色器代码中自行实现照明。例如,要使靠近光源的粒子变亮,只需通过每个粒子与灯光位置之间的距离使其颜色变亮:

vec3 lightPosition = vec3(1.0, 2.0, 3.0);
float lightStrength = 0.1;

float distanceToLightSource = distance(particlePosition, lightPosition);

vec4 lighterColor = particleColor * distanceToLightSource * lightStrength;

哇,你把事情简化得这么好。谢谢你的回复!我想到过类似的东西,但我对GLSL的经验还不够丰富,无法为它编写代码。不过我完全理解你的答案,因为我已经在着色器中添加了一个灯光位置,并在玩弄它。这太棒了!您可能还认识到,粒子位置在片段着色器中本机不可用,因此它必须作为可变变量从顶点着色器传递。谢谢,我已经传递了粒子位置。我真的很接近。我只是没有它的方程式。