1
Graphique / Re: Comment modifier un sprite pixel par pixel ?
« le: Octobre 27, 2017, 02:52:42 pm »
Salut l'ami,
J'ai réussi à faire ce que je voulais faire ! Récupérer les pixels un par un selon l'orientation d'un rayon qui parcourt un scanline ! :-D
https://gyazo.com/792b4c053fe375425900b7316cb9fbab
Le GIF est de mauvaise qualité mais je te laisse voir le résultat sur le screenshot ici, on voit bien mieux :
https://image.noelshack.com/fichiers/2017/43/5/1509108663-yes.png
En gros je récupère pixel par pixel le long du parcours du rayon :
Et ensuite ma fonction d'assignation des pixels :
Merci infiniment à toi !!
J'ai réussi à faire ce que je voulais faire ! Récupérer les pixels un par un selon l'orientation d'un rayon qui parcourt un scanline ! :-D
https://gyazo.com/792b4c053fe375425900b7316cb9fbab
Le GIF est de mauvaise qualité mais je te laisse voir le résultat sur le screenshot ici, on voit bien mieux :
https://image.noelshack.com/fichiers/2017/43/5/1509108663-yes.png
En gros je récupère pixel par pixel le long du parcours du rayon :
///RECUPERATION DU TRAIT DE PIXELS AU FUR ET A MESURE///
if (line[1].position.x >= 0 && line[1].position.x <= texture.getSize().x &&
line[1].position.y >= 0 && line[1].position.y <= texture.getSize().y)
{
redLine[1].position = {line[1].position.x, line[1].position.y};
sf::Color c = sf ::Color(img.getPixel((int)line[1].position.x, (int)line[1].position.y).r,
img.getPixel((int)line[1].position.x, (int)line[1].position.y).g,
img.getPixel((int)line[1].position.x, (int)line[1].position.y).b);
vecColors.push_back(c);
}
if (line[1].position.x >= 0 && line[1].position.x <= texture.getSize().x &&
line[1].position.y >= 0 && line[1].position.y <= texture.getSize().y)
{
redLine[1].position = {line[1].position.x, line[1].position.y};
sf::Color c = sf ::Color(img.getPixel((int)line[1].position.x, (int)line[1].position.y).r,
img.getPixel((int)line[1].position.x, (int)line[1].position.y).g,
img.getPixel((int)line[1].position.x, (int)line[1].position.y).b);
vecColors.push_back(c);
}
Et ensuite ma fonction d'assignation des pixels :
texStripe.create(1, vecColors.size());
sf::Uint8 pixels[vecColors.size()*4];
stripe[0].texCoords = {0,0};
stripe[1].texCoords = {0, vecColors.size()};
stripe[1].position = {stripe[0].position.x, vecColors.size()};
for (unsigned int i = 0 ; i < vecColors.size() ; i++)
{
pixels[(i)*4+0] = vecColors[i].r;
pixels[(i)*4+1] = vecColors[i].g;
pixels[(i)*4+2] = vecColors[i].b;
pixels[(i)*4+3] = vecColors[i].a;
}
texStripe.update(pixels);
sf::Uint8 pixels[vecColors.size()*4];
stripe[0].texCoords = {0,0};
stripe[1].texCoords = {0, vecColors.size()};
stripe[1].position = {stripe[0].position.x, vecColors.size()};
for (unsigned int i = 0 ; i < vecColors.size() ; i++)
{
pixels[(i)*4+0] = vecColors[i].r;
pixels[(i)*4+1] = vecColors[i].g;
pixels[(i)*4+2] = vecColors[i].b;
pixels[(i)*4+3] = vecColors[i].a;
}
texStripe.update(pixels);
Merci infiniment à toi !!