13Fermer15
ExUtilisateur1Le 28/11/2010 à 14:25
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.