Hello,

J'ai mes deux sphères à l'écran dont une qui tourne autour de la première du moins c'est ce que je croyais !

J'ai définit mon GraphicsDevice comme suit:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
...
CurrentGraphicsDevice.PreferredBackBufferWidth = 800;
CurrentGraphicsDevice.PreferredBackBufferHeight = 480;
CurrentGraphicsDevice.SupportedOrientations = DisplayOrientation.LandscapeLeft;
CurrentGraphicsDevice.ApplyChanges();
...
ce qui donne un +X vers la droite de l'écran et un +Y vers le haut et un +Z dans la profondeur de l'appareil étant donné la valeur LandscapeLeft

En suite, j'ai défini ma caméra comme suit:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
...
CurrentPosition=new Vector3(0, 0, -400);
CurrentTarget = Vector3.Zero;
CameraUp = Vector3.Up;
 
CurrentView = Matrix.CreateLookAt(CurrentPosition, CurrentTarget, CameraUp);
...
Maintenant la position des sphères:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
...
Sphere01.CurrentPosition = Vector3.Zero;
Sphere01.Camera = Camera;
 
Sphere02.CurrentPosition = new Vector3(100,0,0);
Sphere02.Camera = Camera;
...
Et le code pour faire tourner la Sphere02 autour de la Sphere01:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
...
public override void Update(GameTime gameTime)
{
Angle += (float)(gameTime.ElapsedGameTime.TotalSeconds * OrbitalSpeed);
float Circle = MathHelper.Pi * 2;
Angle = Angle % Circle;
 
float CurrentX = OrbitalRadius * (float)Math.Cos(Angle);
float CurrentZ = OrbitalRadius * (float)Math.Sin(Angle);
 
CurrentPosition = new Vector3(CurrentX, 0, CurrentZ);
 
MatrixTranslation = Matrix.CreateTranslation(CurrentPosition);
}
...
Et le code pour dessiner la nouvelle position:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public override void Draw(GameTime gameTime)
{
  MatrixBonesTransforms = new Matrix[Model.Bones.Count];
  Model.CopyAbsoluteBoneTransformsTo(MatrixBonesTransforms);
 
  foreach (ModelMesh CurrentMesh in Model.Meshes)
  {
    foreach (BasicEffect CurrentEffect in CurrentMesh.Effects)
    {
      CurrentEffect.PreferPerPixelLighting = true;
      CurrentEffect.LightingEnabled = true;
      CurrentEffect.AmbientLightColor = new Vector3(0.1f, 0.1f, 0.1f);
      CurrentEffect.TextureEnabled = Textured;
 
      CurrentEffect.World = MatrixWorld * MatrixBonesTransforms[CurrentMesh.ParentBone.Index];
      CurrentEffect.View = Camera.CurrentView;
      CurrentEffect.Projection = Camera.CurrentProjection;
 
    }
    CurrentMesh.Draw();
  }
 
  base.Draw(gameTime);
}
Donc pour moi, le point de vue est perpendiculaire au plan X,Y et la Sphere02 se déplace dans le plan X,Z et devrait donc passer derrière la Sphere01 au bout d'un moment.

Donc quand je lance mon application, on dirait que la caméra est perpendiculaire au plan X,Z et la Sphere02 ne passe donc pas derrière la Sphere01.

Je ne vois pas !!!