J'ai un soucis lors de l'affichage de mes couches tilemap uniquement quand j'utilise une texture atlas ( commune à tout les tiles ) généré via cette méthode :
void tileManager::generateAtlasTexture(sf::Int32 edgeSize)
{
int x = 0;
int y = 0;
int nl = int(((sqrt( mTileArray.size() )*.5f)*2))+1;
sf::Int32 atlasSquare = nl * edgeSize;
mAtlasTexture.create(atlasSquare,atlasSquare);
std::vector<tile*>::iterator it;
for(it=mTileArray.begin(); it<mTileArray.end(); ++it)
{
// retrieve tile
tile * t = *it;
// get pixel
const sf::Uint8 * pixels = t->getTexture().copyToImage().getPixelsPtr();
// update them into atlas texture
mAtlasTexture.update (pixels,edgeSize,edgeSize,x,y);
t->mAtlasCoordinate.left = x;
t->mAtlasCoordinate.top = y;
t->mAtlasCoordinate.width = edgeSize;
t->mAtlasCoordinate.height = edgeSize;
t->mSprite.setTexture(mAtlasTexture);
t->mSprite.setTextureRect(t->mAtlasCoordinate);
x += edgeSize;
if (x>=atlasSquare)
{
x = 0;
y+=edgeSize;
}
}
// control
//mAtlasTexture.copyToImage().saveToFile("ctrl.png");
}
mAtlasCoordinate est un sf::IntRect , l'effet obtenu est le suivant :
je voudrais obtenir :
pour le résultat qui fonctionne , je découpe chaque tuile dans une image que je copie et que j'ajoute dans un sf::Texture , chaque tuile a donc un sf::Texture & sf::Image propre , mais en vue d'optimisé le tout
je dois passé par une texture atlas pour faire ensuite l'optimisation avec un vertex array.
j'ai fait le tour de la question , setSmooth() n'est pas activé , ce n'est pas un problème de positionnement des tuilles puisque sinon cela apparaîtrait avec la méthode de base , une texture & une image par tile.
je pense plus à un soucis d'uv au niveau sfml , clamp de texture ?
merci de m'apporté un oeil neuf sur ce problème.