123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- import XrFrame from 'XrFrame';
- const xrFrameSystem = wx.getXrFrameSystem();
- xrFrameSystem.registerEffect('shining', scene => scene.createEffect({
- name: "shining",
- properties: [
- {
- key: 'u_color',
- type: xrFrameSystem.EUniformType.FLOAT4,
- default: [1, 1, 1, 1]
- },
- {
- key: 'u_range',
- type: xrFrameSystem.EUniformType.FLOAT2,
- default: [0.5, 1]
- },
- {
- key: 'u_speed',
- type: xrFrameSystem.EUniformType.FLOAT,
- default: [1]
- },
- ],
- images: [
- {
- key: 'u_reflection',
- default: 'white',
- macro: 'WX_USE_REFLECTION'
- }
- ],
- defaultRenderQueue: 2000,
- passes: [{
- "renderStates": {
- cullOn: false,
- blendOn: false,
- depthWrite: true,
- },
- lightMode: "ForwardBase",
- useMaterialRenderStates: true,
- shaders: [0, 1]
- }],
- shaders: [`#version 100
- uniform mat4 u_world;
- uniform mat4 u_view;
- uniform mat4 u_projection;
- uniform mat4 u_viewInverse;
- attribute vec3 a_position;
- attribute vec3 a_normal;
- #ifdef WX_USE_NORMAL
- varying highp vec3 v_normal;
- varying highp vec3 v_viewDir;
- #endif
- void main()
- {
- vec4 worldP = u_world * vec4(a_position, 1.0);
- #ifdef WX_USE_NORMAL
- v_normal = normalize(mat3(u_world) * a_normal);
- v_viewDir = normalize(worldP.xyz - u_viewInverse[3].xyz);
- #endif
- gl_Position = u_projection * u_view * worldP;
- }
- `,
- `#version 100
- #define RECIPROCAL_PI 0.3183098861837907
- precision highp float;
- precision highp int;
- #ifdef WX_USE_NORMAL
- varying highp vec3 v_normal;
- varying highp vec3 v_viewDir;
- #endif
- uniform float u_gameTime;
- uniform vec4 u_color;
- uniform vec2 u_range;
- uniform float u_speed;
- uniform sampler2D u_reflection;
- vec4 textureBilinearEnvMap(sampler2D texture, vec3 direction){
- float uvX = (atan(direction.x, direction.z) ) * RECIPROCAL_PI * 0.5 + 0.5;
- float uvY = acos(direction.y) * RECIPROCAL_PI;
- vec2 uv = vec2(uvX, uvY);
- vec4 envmap = texture2D(texture, uv);
- return envmap;
- }
- void main()
- {
- vec4 color;
- #if defined(WX_USE_REFLECTION) && defined(WX_USE_NORMAL)
- vec3 reflectVec = reflect(-v_viewDir, v_normal);
- color = textureBilinearEnvMap(u_reflection, reflectVec) * u_color;
- #else
- color = u_color;
- #endif
- gl_FragData[0] = (u_range.x + sin(mod(u_gameTime * u_speed, 3.14)) * (u_range.y - u_range.x)) * color;
- }
- `],
- }));
|