У меня есть этот шейдер, который позволяет мне немного освещать игрока, теперь я хочу добавить в игру более 1 очка.например, когда стреляет пуля, она также создает эту «зону» вокруг нее ... только с тем, что у меня сейчас есть, она рисует только пулю, а не игрока.
Как я могу добавить несколько очковк тому же, как он может редактировать шейдер для обработки массива ??
часть в функции рендеринга
sf::Shader shader;
shader.setParameter("texture", sf::Shader::CurrentTexture);
shader.setParameter("lcolor", sf::Color(255, 255, 255, 100));
std::vector<sf::Vector3f> unarray;
if (shader.loadFromFile("lights.frag", sf::Shader::Fragment))
{
size_t i = 0;
for (auto e : m_entityManager.getEntities())
{
if (e->hasComponent<CLight>())
{
Vec2 pos = e->getComponent<CTransform>()->pos;
//unarray.push_back();
int offSet = windowCenterX==pPos.x ? pPos.x -m_game.window().getSize().x / 2.0f :0 ;
shader.setParameter("light", sf::Vector3f(pos.x- offSet, pos.y, e->getComponent<CLight>()->size));
i++;
}
}
//converting to the correct coords
sf::Vector2f coord_pos = m_game.window().mapPixelToCoords(sf::Vector2i(0, 0));
sf::RectangleShape rect;
rect.setPosition(coord_pos);
rect.setSize(sf::Vector2f(m_game.window().getSize().x, m_game.window().getSize().y));
m_game.window().draw(rect, &shader);
}
шейдер:
uniform sampler2D texture ;
uniform vec3 light;
uniform vec4 lcolor;
void main() {
float distance = sqrt(pow(gl_FragCoord.x - light.x, 2) + pow(gl_FragCoord.y - light.y, 2));
if (floor(light.x) == floor(gl_FragCoord.x) && floor(light.y) == floor (gl_FragCoord.y))
distance = 0.1;
if (distance > light.z)
distance = light.z;
vec2 pos = gl_TexCoord[0].xy ;
gl_FragColor = mix(texture2D(texture,pos), lcolor, 1.0-(distance/light.z));
}