68Close
ExUtilisateur1On the 2011-01-08 at 12:47am
CreateHeightfieldMesh crée un des Mesh, de la même façon que dans le code MSDN.
Ca ressemble à ça: (version simplifiée, j'ai viré la création du buffer d'indice, et d'autres trucs inutiles à la compréhension de la fonction)
        private void CreateHeightfieldMesh(Microsoft.DirectX.Direct3D.Device device, int col, int row)
        {
            // Data range - get one extra row/col around the tile for normal computation
            int startX = meshWidth * col - 1;
            int startY = meshWidth * row - 1;
            int endX = Math.Min(639, startX + meshWidth + 2);
            int endY = Math.Min(479, startY + meshWidth + 2);

            // For each point in the height field calculate the x, y, z and
            // texture coordinates.
            for (int y = startY; y <= endY; y++)
            {
                for (int x = startX; x <= endX; x++)
                {
                    CustomVertex.PositionNormalTextured vertex = new CustomVertex.PositionNormalTextured();
                    vertex.X = (float)X;
                    vertex.Y = (float)Y;
                    vertex.Z = (float)getDepth(x,y); // retourne la profondeur en (x,y)
                    arrayVertices[vertIndex++] = vertex;
                }
            }
           mesh.VertexBuffer.SetData(arrayVertices, 0, LockFlags.None);
        }
Et bon, un HF de 4 par 3, t'es sûr de ce que tu fais ?
J'ai trop simplifié en disant "col et row deviendont X et Y dans CreateHeightfieldMesh()" car en fait, col et row permettront de donner le debut et la fin en x ainsi qu'en y. En fait, la depthmap de 640X480 est découpée en carrés de 170 pixels de coté.
Pourquoi diviser 640 et 480 par 170 ?
Un Mesh ne contient malheureusement pas un nombre illimité de vertex. C'est essentiellement limité par la carte graphique, et 170 * 170 * 6 pour une carte graphique récente, enfin, la mienne, c'est le maximum, sinon directX plante. Donc pour créer des Mesh de maximum 170 * 170 * 6 vertex avec une depthMap de 640X480, je dois diviser la depthmap en 15 Mesh. Peut être moins avec des Mesh non carré, mais osef...
Pas encore regardé le code MSDN...
Pas de problème, c'est déja très sympas à toi de m'aider. Et puis je viens de mettre plus haut la seule fonction de la page que j'ai utilisé, plus besoin d'y aller.

(*) Ça me fait penser que je ne vois pas l’intérêt d'utiliser un indice-buffer, pour avoir 6 fois plus de vertex que de points dans la depthmap. C'est pourtant un exemple MSDN... Je jetterais un oeil au buffer d'indice plus tard, mais ce n'est pas ça qui me fera gagner mes 20 fps.