Цвет объекта изменился при применении отражения шейдера GLSL в three.js - PullRequest
0 голосов
/ 24 сентября 2018

Когда я применяю отражение к своему объекту, цвет объекта изменился, и он не получил правильный цвет. Без отражения он работает нормально.Но когда я применил цвет отражения изменился. Пожалуйста, помогите?Где моя вершина и фрагмент шейдера ..

   vertex_shader =
    uniform float mRefractionRatio;
    uniform float mFresnelBias;
    uniform float mFresnelScale;
    uniform float mFresnelPower;
    varying vec3 vReflect;
    varying vec3 vRefract[3];
    varying float vReflectionFactor;
    attribute vec3 a_normal;
    varying vec3 v_normal;
    varying vec3 v_position;
    uniform mat3 u_normalMatrix;
    void main() {
    vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );
    v_position = mvPosition.xyz;
    vec4 worldPosition = modelMatrix * vec4( position, 1.0 );
    vec3 worldNormal = normalize( mat3( modelMatrix[0].xyz, modelMatrix[1].xyz, modelMatrix[2].xyz ) * normal );
    vec3 I = worldPosition.xyz - cameraPosition;
    vReflect = reflect( I, worldNormal );
    v_normal = u_normalMatrix * a_normal;
    vRefract[0] = refract( normalize( I ), worldNormal, 0.02 );
    vRefract[1] = refract( normalize( I ), worldNormal, 0.02 * 0.2);
    vRefract[2] = refract( normalize( I ), worldNormal, 0.02 * 0.2 );
    vReflectionFactor = 0.1 + 1.0 * pow( 1.0 + dot( normalize( I ), worldNormal ), 0.2 );
    gl_Position = projectionMatrix * mvPosition;};



    fragment_shader =
    uniform samplerCube tCube;
    varying vec3 vReflect;
    varying vec3 vRefract[3];
    varying float vReflectionFactor;
    uniform vec4 u_ambient;
    uniform vec4 u_emission;
    uniform vec4 u_specular;
    uniform vec4 u_diffuse;
    varying vec3 v_normal;
    varying vec3 v_position;
    varying vec3 u_reflectivity;
    void main() {
    vec4 color = vec4(0., 0., 0., 1);
    vec3 diffuseLight = vec3(0., 0., 0.);
    vec3 u_light2Color = vec3(1.0,1.0,1.0);
    vec3 u_light1Color = vec3(0.5,1.0,1.0);
    vec4 diffuse = vec4(0.0, 0.0, 0.0, 1.0);
    vec3 specularLight = vec3(0.5, 0.5,0.5);
    vec4 reflectedColor = textureCube( tCube, vec3( -vReflect.x, vReflect.yz ) );
    vec4 refractedColor = vec4(1 );
    refractedColor.r = textureCube( tCube, vec3( -vRefract[0].x, vRefract[0].yz ) ).r;
    refractedColor.g = textureCube( tCube, vec3( -vRefract[1].x, vRefract[1].yz ) ).g;
    refractedColor.b = textureCube( tCube, vec3( -vRefract[2].x, vRefract[2].yz ) ).b;
    gl_FragColor = mix( color, reflectedColor, clamp( vReflectionFactor, 0.0, 1.0 ) );
    };
...