Преобразование света в вершинный шейдер glsl с дополнительным равномерным mat4? - PullRequest
0 голосов
/ 19 июня 2019

Я использую граф сцены для моей сцены. Он содержит огни и сетки. Сетки имеют локальные преобразования, и если узел является дочерним по отношению к узлу сетки, его собственное локальное преобразование составляется с преобразованием его родителя.

Теперь я пытаюсь реализовать свет. Я посылаю координаты источников света (мировые космические координаты) в виде шейдера.

Должен ли я преобразовать эти световые координаты? Мне не имеет смысла преобразовывать эти световые координаты с помощью преобразования, характерного для сетки.

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

Мой код:

#version 330

const int numOfLights = 2;


// shader input
in vec2 vUV;                // vertex uv coordinate
in vec3 vNormal;            // untransformed vertex normal
in vec3 vPosition;          // untransformed vertex position

uniform vec3 pointLights[numOfLights];

// shader output
out vec4 normal;            // transformed vertex normal
out vec2 uv;    
out vec4 position;      
out vec3 lights[numOfLights];           
uniform mat4 transform; //transform unique for this mesh containing the camera transformation


// vertex shader
void main()
{ 
    position = transform * vec4(vPosition, 1.0);
    // transform vertex using supplied matrix
    gl_Position = position;

    // forward normal and uv coordinate; will be interpolated over triangle
    normal = transform * vec4( vNormal, 0.0f );
    uv = vUV;

    for (int i = 0; i < numOfLights; i++) {
        //lights[i] = (transform * vec4(pointLights[i], 1.0)).xyz; //**Transform**?
        lights[i] = pointLights[i];
    }

}
...