Threejs 导入外部gltf模型后,使用着色器材质导致模型动画失效

加载一个心脏的模型,该模型有一个心跳的动画,在不使用着色器材质地情况下,心跳动画能正常产生效果,使用了之后,动画也启动了,但是并没有跳动,使用其他材质都不影响,只有着色器材质地时候有这个问题。

  let uniforms= {
        coeficient: {
          type: "f",
          value: 1.0
        },
        power: {
          type: "f",
          value: 0.2
        },
        glowColor: {
          type: "c",
          value: new THREE.Color("red")
        }
      };

 let vertexShader = [
      'varying vec3    vVertexWorldPosition;',
      'varying vec3    vVertexNormal;',
      'varying vec4    vFragColor;',
      'void main(){',
      '    vVertexNormal    = normalize(normalMatrix * normal);',//将法线转换到视图坐标系中
      '    vVertexWorldPosition    = (modelMatrix * vec4(position, 1)).xyz;',//将顶点转换到世界坐标系中
      '    // set gl_Position',
      '    gl_Position    = projectionMatrix * modelViewMatrix * vec4(position, 1);',
      '}'

    ].join('\n');

 let fragmentShader= [
        'uniform vec3    glowColor;',
        'uniform float    coeficient;',
        'uniform float    power;',

        'varying vec3    vVertexNormal;',
        'varying vec3    vVertexWorldPosition;',

        'varying vec4    vFragColor;',

        'void main(){',
        '    vec3 worldCameraToVertex= vVertexWorldPosition - cameraPosition;',    //世界坐标系中从相机位置到顶点位置的距离
        '    vec3 viewCameraToVertex    = (viewMatrix * vec4(worldCameraToVertex, 0.0)).xyz;',//视图坐标系中从相机位置到顶点位置的距离
        '    viewCameraToVertex    = normalize(viewCameraToVertex);',//规一化
        '    float intensity        = pow(coeficient + dot(vVertexNormal, viewCameraToVertex), power);',
        '    gl_FragColor        = vec4(glowColor, intensity);',
        '}'//vVertexNormal视图坐标系中点的法向量
        //viewCameraToVertex视图坐标系中点到摄像机的距离向量
        //dot点乘得到它们的夹角的cos值
        //从中心向外面角度越来越小(从钝角到锐角)从cos函数也可以知道这个值由负变正,不透明度最终从低到高
      ].join('\n');


let material = new THREE.ShaderMaterial({
      uniforms:uniforms,
      vertexShader:vertexShader,
      fragmentShader: fragmentShader,
      blending: THREE.NormalBlending,
      transparent: true,
      depthWrite: false
    });
尝试过重写着色器,只是简单的实现一个纯白色。
我想要达到的结果

你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答


本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。


因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。