Страницы

Поиск по вопросам

пятница, 27 декабря 2019 г.

Проблема с освещением в шейдере opengl es 2.0

#android #shader #opengles


Имеется ландшафт который я хочу осветить. Собственно везде освещение нормальное,
а ближе к центру огромное белое пятно! Я пока не пойму из за чего это пятно, и как
это исправить. Нужна помощь. Мне нужно понять из за чего это белое пятно выходит, и
понять как его исправить?

Вот скриншет со смартфона samsung galaxy S4



Теперь покажу как на эмуляторе andy



Теперь покажу как распологаются нормали



Вот код фрагментного шейдера:

precision mediump float;
varying vec3 vPosition;
uniform sampler2D uTexture;
uniform sampler2D uTexture2;
uniform vec3 u_camera;
varying vec2 vTexcoord;
varying vec3 v_normal;

float getLight(vec3 lightPos,vec3 camPos,vec3 vertexPos, vec3 normal,
               float ambient, float k_diffuse, float k_specular)
{
    vec3 n_normal=normalize(normal);
    vec3 lightvector = normalize(lightPos - vertexPos);
    vec3 lookvector = normalize(camPos - vertexPos);
    float diffuse = k_diffuse * max(dot(n_normal, lightvector), 0.0);
    vec3 reflectvector = reflect(-lightvector, n_normal);
    float specular = k_specular * pow( max(dot(lookvector,reflectvector),0.0), 60.0
);      
    return ambient+diffuse+specular;
}


void main() {
    vec3 lightPos = vec3(60.0,100.0,-415.0);
    float light = getLight(lightPos,u_camera,vPosition,v_normal,
                           0.5,  0.9,   0.3);

    vec4 pixsel;
    vec3 pos = normalize(vPosition);
    if (pos.y > 0.01) 
        pixsel = texture2D(uTexture2,vTexcoord); 
    else 
        pixsel = texture2D(uTexture,vTexcoord);

    gl_FragColor = light * pixsel;
}

    


Ответы

Ответ 1



Проблема решена, на самом деле не верно передавались координаты камеры.

Комментариев нет:

Отправить комментарий