2009-01-16 6 views
2

Je travaille sur un jeu dans XNA pour Xbox 360. Le jeu a un terrain 3D avec une collection d'objets statiques qui sont reliés par un graphique de liens. Je veux dessiner les liens reliant les objets comme des lignes projetées sur le terrain. Je veux aussi pouvoir changer les couleurs, etc., des liens lorsque les joueurs déplacent leur sélection, même si je n'ai pas besoin des liens pour me déplacer. Cependant, je suis confronté à des problèmes qui rendent ce travail correctement et efficacement.Comment projeter dynamiquement des lignes sur un terrain 3D?

Quelques idées que j'ai eu sont:

1) Render quadriceps à une cible de rendu séparé, et utiliser la texture comme une superposition au-dessus du terrain. J'ai actuellement ce travail, générant la texture seulement pour la zone actuellement visible à la caméra pour minimiser l'alias. Cependant, je reçois toujours des problèmes d'aliasing - les lignes semblent jaggy, et le jeu chugs fréquemment lors du déplacement de la caméra EDIT: il chugs tout le temps, je n'ai tout simplement pas de compteur de fréquence d'images sur Xbox alors je seulement remarquez quand les choses bougent.

2) Faire cuire les lignes dans une texture à l'avance. Cela pourrait augmenter les performances, mais aggraver le problème d'aliasing. En outre, il ne me laisse pas changer de façon dynamique les propriétés des lignes sans trop mélanger.

3) Faire une géométrie qui correspond à la forme du terrain en mosaïquant les quadrilatères sur le terrain. Cette option semble pouvoir aider, mais je ne sais pas si je devrais passer du temps à l'essayer s'il y a un moyen plus simple.

Y at-il un moyen magique de faire cela auquel je n'ai pas pensé? L'un de ces chemins est-il le meilleur lorsqu'il est fait correctement?

+0

Je n'ai pas de réponse, mais cela me fait penser à l'algèbre linéaire. Peut-être qu'il y a une transformation matricielle que vous pouvez faire? Désolé, cela peut ne pas aider. – jcollum

+0

De la même manière que vous le faites statiquement, mais plus souvent et après que le programme soit en cours d'exécution. :-) – paxdiablo

Répondre

1

Votre 1) est une assez bonne solution. Vous pouvez réduire la jagosité en filtrant - d'abord, assurez-vous d'utiliser un échantillonnage bilinéaire lorsque vous utilisez le recouvrement. Ensuite, essayez d'estomper la superposition après l'avoir dessinée mais avant de l'utiliser; Si vous choisissez un filtre approprié, il supprimera l'alias.

Si le rendu de la superposition prend trop de temps, essayez de réduire sa résolution. Sans le filtre anti-crénelage, cela ne ferait que le rendre plus crasseux, mais avec un bon filtre, il pourrait même sembler meilleur.

Je ne sais pas pourquoi le jeu ne bougerait que lors du déplacement de la caméra. Rappelez-vous, vous devriez avoir une caméra séparée pour la superposition - orthogonale, et pointant vers le bas sur le terrain.

+0

Les jaggies sont assez mauvais, au point que je ne suis pas sûr que toute quantité de filtrage aiderait. –

+0

Vous pourriez être surpris. Quoi qu'il en soit, une autre chose (une sorte d'équivalent) que vous pourriez essayer est de rendre flou les bords des lignes lorsque vous les dessinez - faites-les disparaître de la transparence sur les bords pour opacifier vers le centre. – comingstorm

-2

XNA dispose-t-il d'une bibliothèque d'observation? Si oui, vous pourriez juste prétendre que les lignes sont des ombres.

Questions connexes