Сложная ошибка GLSL: приведение приведения от vec4 к vec3 - PullRequest
0 голосов
/ 12 декабря 2018

Ненужные vec4() vec3() предназначены только для устранения проблемы.

Полные ошибки:

0 (36): ошибка C7011: неявное приведение из "vec4""to" vec3 "
0 (36): ошибка C1035: присвоение несовместимых типов

код:

#version 330

in vec2 pass_textureCoords;
in vec3 surfaceNormal;
in vec3 toLightVector;
in vec3 toCameraVector;
in vec3 visibility;

out vec4 out_Color;

uniform sampler2D textureSampler;
uniform vec3 lightColor;
uniform float shineDamper;
uniform float reflectivity;
uniform vec3 skyColor;

void main(void) {

    vec3 unitNormal = normalize(surfaceNormal);
    vec3 unitLightVector = normalize(toLightVector);

    float nDotl = dot(unitNormal, unitLightVector);
    float brightness = max(nDotl, 0.2);
    vec3 diffuse = brightness * lightColor;

    vec3 unitVectorCameraVector = normalize(toCameraVector);
    vec3 lightDirection = -unitLightVector;
    vec3 reflectedLightDirection = reflect(lightDirection, unitNormal);

    float specularFactor = dot(reflectedLightDirection, unitVectorCameraVector);
    specularFactor = max(specularFactor, 0.0);
    float dampedFactor = pow(specularFactor, shineDamper);
    vec3 finalSpecular = dampedFactor * reflectivity *lightColor;

    out_Color = vec4(diffuse, 1.0) * texture(textureSampler, pass_textureCoords) + vec4(finalSpecular, 1.0);
    out_Color = mix(vec4(skyColor, 1.0), vec4(out_Color), visibility);
}

1 Ответ

0 голосов
/ 12 декабря 2018

Проблема в том, что вы используете vec3 в качестве третьего аргумента для mix().Это не правильно, так как это может быть только тот же тип, что и тип других аргументов: vec4() или использовать примитивный тип.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...