J'essais de transformer les donnéees (videos et profondeurs) du Kinect de Microsoft en modèle 3D.
J'ai essayé en OpenGL et C++, en D3D et .Net, avec des triangles list, strip, et maintenant avec des Mesh (avec vertex et indice buffer).
Mais je n'arrive pas au 30fps que m'envoit le Kinect.
J'ai un modèle 3D texturé correct, si ce n'est ce problème de framerate.
J'utilise à peu de chose près la fonction CreateHeightfieldMesh() du site MSD que j'ai cité plus haut, mais comme j'ai plus de 15 Mesh (un Mesh étant limité à 170X70), je l'appelle plusieurs fois comme cela :
int meshWidth = 170; // Nombre de ligne et colonne par Mesh, j'ai pris le maximum autorisé pour gagner en vitesse, au delà ça plante
int tileCols = (int)Math.Ceiling((float)(640 - 1) / (float)meshWidth);
int tileRows = (int)Math.Ceiling((float)(480 - 1) / (float)meshWidth);
public void BuildMeshFromDepth()
{
for (int col = 0; col < tileCols; col++)
{
for (int row = 0; row < tileRows; row++)
{
CreateHeightfieldMesh(device, row, col); /col et row deviendont X et Y dans CreateHeightfieldMesh().
}
}
}
C'est, et de loin, la fonction qui prend le plus de temps dans mon rendu.
Je ne peu donc pas précalculer, ni stocker par avance en mémoire.
Je ne peu pas non plus simplifier le modèle, cela serait contre-productif en vitesse et en qualité.