Salut tmyke, j'ai suivi ta procédure et non seulement ça résoud mon problème, mais en plus il est possible que je ne gaspille pas de ressources puisques il y a plusieurs façons de copier un imesh.
cependant je ne comprend pas tout à fait ce qui se passe mais tu pourra sans doute m'éclairer.
voici ce que je trouvé dans la classe IMeshManipulator :
Code c++ :
virtual IMesh * createMeshUniquePrimitives (IMesh *mesh) const =0
// Creates a copy of a mesh with all vertices unwelded.
virtual IMesh * createMeshWelded (IMesh *mesh, f32 tolerance=core::ROUNDING_ERROR_32) const =0
// Creates a copy of a mesh with vertices welded.
virtual IMesh * createMeshWith2TCoords (IMesh *mesh) const =0
// Creates a copy of the mesh, which will only consist of S3DVertex2TCoord vertices.
virtual IMesh * createMeshWithTangents (IMesh *mesh, bool recalculateNormals=false, bool smooth=false, bool angleWeighted=false) const =0
// Creates a copy of the mesh, which will only consist of S3DVertexTangents vertices.
Voilà j'ai choisi au pif createMeshWith2TCoords, cependant je ne comprend pas ce qui se passe en mémoire quand je fait
imesh* cube1= directeurDeScene->getMeshManipulator()->createMeshWith2TCoords(modele->getMesh(0));
est-ce que il y toujours quelques pointeurs vers le modele ? ou alors ça alloue un nouvel espace pour stocker toutes les propopriété du nouvel imesh ?
enfin en tout cas merci, ça faisait un moment que je bloquais quand même

Aussinon pour en revenir à mon problème de départ pour faire répéter la texture au lieu qu'elle s'etire lors d'un scale, j'ai modifié encore une fois au pif

la fonction makeplanartexturemapping
pour qu'elle prenne en paramètre le scale de mes mesh. mais j'ai un doute.
Code c++ :
void TextureMapping(scene::IMesh* mesh,int x,int y,int z, f32 resolution=0.01f)
{
if (!mesh)
return;
const u32 bcount = mesh->getMeshBufferCount();
for ( u32 b=0; b<bcount; ++b)
{
IMeshBuffer* buffer = mesh->getMeshBuffer(b);
u32 idxcnt = buffer->getIndexCount();
u16* idx = buffer->getIndices();
for (u32 i=0; i<idxcnt; i+=3)
{
core::plane3df p(buffer->getPosition(idx[i+0]), buffer->getPosition(idx[i+1]), buffer->getPosition(idx[i+2]));
p.Normal.X = fabsf(p.Normal.X)*x;
p.Normal.Y = fabsf(p.Normal.Y)*y;
p.Normal.Z = fabsf(p.Normal.Z)*z;
// calculate planar mapping worldspace coordinates
if (p.Normal.X > p.Normal.Y && p.Normal.X > p.Normal.Z)
{
for (u32 o=0; o!=3; ++o)
{
buffer->getTCoords(idx[i+o]).X = buffer->getPosition(idx[i+o]).Y * resolution*y;
buffer->getTCoords(idx[i+o]).Y = buffer->getPosition(idx[i+o]).Z * resolution*z;
}
}
else if (p.Normal.Y > p.Normal.X && p.Normal.Y > p.Normal.Z)
{
for (u32 o=0; o!=3; ++o)
{
buffer->getTCoords(idx[i+o]).X = buffer->getPosition(idx[i+o]).X * resolution*x;
buffer->getTCoords(idx[i+o]).Y = buffer->getPosition(idx[i+o]).Z * resolution*z;
}
}
else if (p.Normal.Z > p.Normal.X && p.Normal.Z > p.Normal.Y)
{
for (u32 o=0; o!=3; ++o)
{
buffer->getTCoords(idx[i+o]).X = buffer->getPosition(idx[i+o]).X * resolution*x;
buffer->getTCoords(idx[i+o]).Y = buffer->getPosition(idx[i+o]).Y * resolution*y;
}
}
}}
}
Voilà, c'est tellement couillon que je me dit qu'il doit y avoir une raison de cette absence de fonctionnalité, et donc j'ai peur de faire des bêtises. qu'en penses-tu ?