Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
Проблема с шейдером
#2
light_pos нужно трансформировать в видовое пространство. Правильный шейдер будет выглядеть так:

Код:
[== c++ ==]
varying vec3 normal;
varying vec3 position;
varying vec3 light;
uniform mat4 viewMatrix;

const vec4 light_pos = vec4(0.0, 10.0, 0.0, 1.0);

void main()
{
    normal = gl_NormalMatrix * gl_Normal;
    position = (gl_ModelViewMatrix * gl_Vertex).xyz;
    light = (viewMatrix * light_pos).xyz;
    gl_Position = ftransform();
}

Код:
[== c++ ==]
varying vec3 normal;
varying vec3 position;
varying vec3 light;

void main()
{
    vec3 N = normalize(normal);
    vec3 LN = normalize(light - position);
    float L = max(dot(N, LN), 0.0);
    vec3 color = gl_FrontMaterial.diffuse * L;
    gl_FragColor = vec4(color, 1.0);
}

Соответственно, надо также передать в шейдер видовую матрицу:

Код:
[== c++ ==]
paramViewMatrix = GLSLShaderCreateParameter(shader, 'viewMatrix');
GLSLShaderSetParameterViewMatrix(paramViewMatrix);
Ответ


Сообщения в этой теме

Перейти к форуму:


Пользователи, просматривающие эту тему: 1 Гость(ей)