[LayaAir 2.0]同时使用雾和粒子系统,粒子的颜色变成雾的颜色

已邀请:

……

赞同来自:

http://ask.layabox.com/question/41966
最后参考这位的,不过做了一些修改,原来的代码
uniform vec4 u_Tintcolor;

#ifdef RENDERMODE_MESH
 varying vec4 v_MeshColor;
#endif

#ifdef FOG
 varying vec3 v_PositionWorld;
 uniform vec3 u_CameraPosition;
 uniform float u_FogStart;
 uniform float u_FogRange;
 #ifdef ADDTIVEFOG
 #else
 uniform vec3 u_FogColor;
 #endif
#endif


void main()

 #ifdef RENDERMODE_MESH
  gl_FragColor=v_MeshColor;
 #else
  gl_FragColor=vec4(1.0); 
 #endif
  
 #ifdef DIFFUSEMAP
  if(v_Discard!=0.0)
   discard;
  #ifdef TINTCOLOR
   gl_FragColor*=texture2D(u_texture,v_TextureCoordinate)*u_Tintcolor*2.0*v_Color;
  #else
   gl_FragColor*=texture2D(u_texture,v_TextureCoordinate)*v_Color;
  #endif
 #else
  #ifdef TINTCOLOR
   gl_FragColor*=u_Tintcolor*2.0*v_Color;
  #else
   gl_FragColor*=v_Color;
  #endif
 #endif
 
 #ifdef FOG
  vec3 toEye=u_CameraPosition-v_PositionWorld;
  float toEyeLength=length(toEye);
  toEye/=toEyeLength;
  
  float lerpFact=clamp((toEyeLength-u_FogStart)/u_FogRange,0.0,1.0);
  #ifdef ADDTIVEFOG
   gl_FragColor.rgb=mix(gl_FragColor.rgb,vec3(0.0,0.0,0.0),lerpFact);
  #else
   gl_FragColor.rgb=mix(gl_FragColor.rgb,u_FogColor,lerpFact);
  #endif
 #endif
}";
删掉了这部分:
#ifdef FOG
  vec3 toEye=u_CameraPosition-v_PositionWorld;
  float toEyeLength=length(toEye);
  toEye/=toEyeLength;
  
  float lerpFact=clamp((toEyeLength-u_FogStart)/u_FogRange,0.0,1.0);
  #ifdef ADDTIVEFOG
   gl_FragColor.rgb=mix(gl_FragColor.rgb,vec3(0.0,0.0,0.0),lerpFact);
  #else
   gl_FragColor.rgb=mix(gl_FragColor.rgb,u_FogColor,lerpFact);
  #endif
 #endif
最后:
ps ="#ifdef HIGHPRECISION\n  precision highp float;\n#else\n  precision mediump float;\n#endif\n\nvarying float v_Discard;\nvarying vec4 v_Color;\nvarying vec2 v_TextureCoordinate;\nuniform sampler2D u_texture;\nuniform vec4 u_Tintcolor;\n\n#ifdef RENDERMODE_MESH\n    varying vec4 v_MeshColor;\n#endif\n\n#ifdef FOG\n   varying vec3 v_PositionWorld;\n uniform vec3 u_CameraPosition;\n    uniform float u_FogStart;\n uniform float u_FogRange;\n #ifdef ADDTIVEFOG\n #else\n     uniform vec3 u_FogColor;\n  #endif\n#endif\n\n\nvoid main()\n{  \n  #ifdef RENDERMODE_MESH\n        gl_FragColor=v_MeshColor;\n #else\n     gl_FragColor=vec4(1.0); \n  #endif\n        \n  #ifdef DIFFUSEMAP\n     if(v_Discard!=0.0)\n            discard;\n      #ifdef TINTCOLOR\n          gl_FragColor*=texture2D(u_texture,v_TextureCoordinate)*u_Tintcolor*2.0*v_Color;\n       #else\n         gl_FragColor*=texture2D(u_texture,v_TextureCoordinate)*v_Color;\n       #endif\n    #else\n     #ifdef TINTCOLOR\n          gl_FragColor*=u_Tintcolor*2.0*v_Color;\n        #else\n         gl_FragColor*=v_Color;\n        #endif\n    #endif\n    \n  #ifdef FOG\n        vec3 toEye=u_CameraPosition-v_PositionWorld;\n      float toEyeLength=length(toEye);\n      toEye/=toEyeLength;\n       \n      float lerpFact=clamp((toEyeLength-u_FogStart)/u_FogRange,0.0,1.0);\n            #endif\n}";
 
shader = Shader3D.add("PARTICLESHURIKEN");
能力有限,只能解决冲突,去掉了雾在粒子上的影响,不能有效的将粒子和雾效果叠加,期待能者的出现,也期待官方解决一下

Nat

赞同来自:

u_CameraPosition改为u_CameraPos就可以了,u_CameraPosition明显是写错的

要回复问题请先

商务合作
商务合作