Привет всем, я работаю с освещением в игре 2D Tile Based, и у меня возникли проблемы с моими расчетами освещения, в моей игре я беру полутоновые изображения, а затем окрашиваю их с помощью шейдеров в любой цвет, какой мне нравится, будь то зеленый (rgb = (0,1,0)) или красный (rgb = (1,0,0)) или любой цвет. Затем я применяю свои расчеты освещения к этому текстурированному и цветному пикселю. Освещение работает хорошо, когда свет белый (rgb = (1,1,1)), но когда он, скажем, красный или зеленый, он не будет отображаться так, как я хочу. Я знаю, почему это происходит, конечно, потому что реалистично чистый красный свет в чисто зеленой комнате не будет отражать красный свет, поэтому комната останется темной. Что я действительно хочу, так это увидеть красный свет над зеленой поверхностью. Итак, мой вопрос: как я могу четко показать красный свет на зеленой поверхности? (Или действительно любой другой цвет на любой поверхности)
Это код для моего фрагментного шейдера, где ослабление - это просто ослабление для света, lightColor - это, очевидно, значение rgb источников света, расстояние - это расстояние от данного вектора до этого источника света (рассчитывается в вершинном шейдере) и, наконец, color - это значение rgb, которое применяется к текстуре.
Заранее спасибо за помощь!
vec3 totalDiffuse = vec3(0.0);
for(int i = 0; i < 4; i++)
{
float attFactor = attenuation[i].x + (attenuation[i].y * distance[i]) + (attenuation[i].z * distance[i] * distance[i]);
totalDiffuse = totalDiffuse + (lightColor[i])/attFactor;
}
totalDiffuse = max(totalDiffuse,0.2);
out_Color = texture(textureSampler, pass_textureCoords)*vec4(color,alpha)*vec4(totalDiffuse,1);
А вот изображение того, как чистый красный свет выглядит на поверхности в настоящее время, он должен быть внутри белого круга, и вы можете увидеть, что он немного влияет на воду, потому что я даю воде маленький красный компонент-
Light Demo Image