Bonjour,
J'implémente en ce moment un quadtree sur une liste de cases (un Heightmap déguisé en fait), seulement je n'arrive pas à définir sir ma case est visible ou non.
J'ai fait un boundingFrustum à partir de ma caméra:
puis:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 CameraPosition = CameraTarget + new Vector3(-Radius, 0, (float)Math.Sin(MathHelper.PiOver4) * Radius); View = Matrix.CreateLookAt(CameraPosition, CameraTarget, CameraUp); Projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4, XSurY, 0.01f, 1000.0f);
puis dans l'initialisation de mon quadtree à partir de ma carte:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 BoundingFrustum frustrum = new BoundingFrustum(cam.Projection * cam.View)
Je fait ensuite le test suivant pour chacun de mes noeuds lors de l'update de ma caméra:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 box = new BoundingBox(new Vector3(X1, Y1, 0), new Vector3(X2, Y2, 0));
Malheureusement, suite à de nombreux tests, ma variable "contient" ne vaut Contains ou Intersect que dans le cas ou ma box débute en 0,0,0 :s
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 ContainmentType contient = box.Contains(frustrum); if (contient == ContainmentType.Contains || contient == ContainmentType.Intersects) { //on entre qu'une seule fois ici snif }
Est-ce que je m'y prend mal? ai-je oublié quelque chose?
Partager