Je ne peux poster que le bout de code dont nous parlons, car il faut un kinect pour obtenir la depth-map. Ça explique pourquoi il y a des points aberrants. Le hardware
marche bien mais il n'est pas parfait.
int n = 640;
int m = 480;
int id = 0;
int indice=0;
for(int y = 0; y <= m-1; y++) // m lignes de points mais m-1 lignes de triangles
{
if(y != 0 || y != m-1)
{
for(int x = 0; x <= n; x++) // cette fois il faut parcourir n colonnes, et non n-1 colonnes
{
id += utiliser_point(x, y, mDepthBuffer[y*640+x], id); // point sur la ligne du dessus
id++;
utiliser_point(x, y+1, mDepthBuffer[(y+1)*640+x], id); // point sur la ligne du dessous
id++;
}
}
else
{
// génère les deux triangles dégénérés de retour à la ligne
utiliser_point(n-1, y+1, mDepthBuffer[(y+1)*640+n-1], id); // point dupliqué de fin de ligne
id ++;
utiliser_point(0, y+1, mDepthBuffer[(y+1)*640], id); // point dupliqué du début de la ligne du dessous
id++;
}
}
mActualVertexCount = id;
mVBOGrid->Upload(mVertices, mActualVertexCount);
Et la fonction utiliser_point qui élimine les points aberrant de la depthmap. Si je les affiche quand même le résultat n'est pas meilleur.
void utiliser_point(int x, int y, float z, int id)
{
mVertices[id].x = x;
mVertices[id].y = y;
mVertices[id].z = z;
}
Je précise qu'en mode GL_POINTS le résultat est excellent.