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");
能力有限,只能解决冲突,去掉了雾在粒子上的影响,不能有效的将粒子和雾效果叠加,期待能者的出现,也期待官方解决一下