J'essaie de faire un jeu 3D WP7 dans XNA en dessinant des modèles constitués de lignes, en utilisant DrawUserIndexedPrimitives Tout cela fonctionne très bien, mais maintenant je veux donner à chaque modèle sa propre rotation. Actuellement j'utilise un BasicEffect pour dessiner tous les modèles. Je peux définir sa rotation, mais tous les objets auront la même rotation. Est-il possible de définir une rotation différente pour chaque objet? Je suis venu en avec quelques solutions que je pourrais utiliser, mais je ne suis pas satisfait de l'un d'eux:XNA pour WP7 jeu: DrawUserIndexedPrimitives
- Créer une nouvelle BasicEffect pour chaque objet, avec son propre monde, puis boucle sur tous les objets pour obtenir leur effet de base et le dessiner - je suppose que tous ces BasicEffects créeraient beaucoup de surcharge, et je veux séparer l'effet des modèles.
- Faire le calcul des points moi-même (c'est-à-dire calcluler la rotation et passer ces valeurs à la méthode DrawUserIndexedPrimitives) - C'est un calcul assez coûteux, qui fait beaucoup baisser la performance.
Y a-t-il une voie suggérée à prendre ici?
Je ne sais pas si DrawUserIndexedPrimitives est la meilleure méthode à utiliser, je veux juste pouvoir dessiner des lignes et leur donner une rotation. S'il y a une meilleure façon de le faire, s'il vous plaît me dire :)
Ma solution actuelle:
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.Black);
foreach (var model in _models)
{
foreach (var pass in model.Effect.CurrentTechnique.Passes)
{
pass.Apply();
model.Effect.World = _model.GetWorld();
var points = model.GetPoints();
GraphicsDevice.DrawUserIndexedPrimitives(PrimitiveType.LineList, points, 0, points.Length, model.Lines, 0, model.Lines.Length/2);
_models[0].Draw(GraphicsDevice);
}
}
base.Draw(gameTime);
}
model.GetWorld() retourne une matrice avec la rotation, la translation et à l'échelle de l'objet, le modèle. GetPoints() une liste avec les points et model.Lines est une liste avec les indices des points connectés