2010-03-07 7 views
0

c'est quelque chose que je ne comprends pas sur la transformation (mailles). S'il vous plaît jeter un oeil à mon premier code (qui est en fonction Render()):Basculer entre les objets actifs - comprendre la transformation/voir

  foreach (GeometricObject obj in this.objects) 
      { 
       if (obj != this.activeObject) 
       { 
        obj.Mesh = MeshUtils.ChangeMeshColor(obj.Mesh, Color.Yellow, device); 
       } 
       else 
       { 
        obj.Mesh = MeshUtils.ChangeMeshColor(obj.Mesh, Color.Green, device); 
        obj.GeometryMatrix.Translate(this.move); 
       } 
       device.Transform.World = obj.GeometryMatrix; 
       obj.Mesh.DrawSubset(0); 
      } 

Explication: J'ai quelques gometriObjects jaunes (mailles) et un ActiveObject vert (je peux basculer entre eux par clavier 1-4). 'move' est un vecteur que je change après chaque flèche sélectionnée sur le clavier (donc je peux déplacer les objets actifs).

MAIS ça ne fonctionne pas comme je le voulais. ... si je change la position de l'un de mes objets ... puis après avoir basculé sur l'autre (en changeant activeObject) j'ai l'autre vue sur l'écran (après tous les commutateurs ... tous les objets sont au même endroit que le écran;/). Pourquoi est-ce que ce n'est pas la même vue pour tout le temps? Je pense que ... il se doit, parce que j'ai la même vue setted:

  device.Transform.View = Matrix.LookAtLH(new Vector3(0.0f, 2.0f, -25.0f), // Camera position 
        new Vector3(0.0f, 0.0f, 0.0f), // Look-at point 
        new Vector3(0.0f, 1.0f, 0.0f)); // Up vector 

Alors, quel est mon problème? Des idées:)? Aha ... le problème n'est pas lié à cette fonction changeMeshColor ... j'ai vérifié.

+0

J'ai lu ceci plusieurs fois et je ne sais toujours pas quelle est votre question. AFAICT le fait que votre matrice de vue ne change jamais mais que vous pouvez changer la position de vos objets signifie que la caméra ne regarde peut-être pas un objet donné. – Goz

Répondre

0

Ech .... il a commencé à travailler après avoir changé:

obj.GeometryMatrix.Translate(this.move); 

à:

obj.GeometryMatrix *= Matrix.Translation(this.move); 

... mais pourquoi est-ce? Je ne sais vraiment pas ... Translate() devrait changer ma matrice, pas définir comme une traduction (comme il l'a fait)

+0

Dans ce dernier code vous transformez une matrice par la matrice de traduction définie par "move". Dans le premier cas, vous créez une matrice de traduction. Le premier écrase tout ce qui était déjà dans la matrice. – Goz