Question

Hé les gars, Im travaillant avec WPF 3d, im en train d'écrire un programme qui va créer des tuiles 3D sur l'écran de gauche à droite, mais je dois savoir ce que mes limites sont sur X, Y-à-dire (-x-0) (0-x +) donc je sais quand commencer une autre rangée de tuiles. Mes premières pensées tentent de trouver un algorithme complexe pour passer de pixels en coordonnées écran, mais il semble qu'il devrait y avoir un moyen plus facile.

Était-ce utile?

La solution

Si je vous comprends bien, vous voulez savoir quelle gamme de coordonnées 3D sont visibles à travers votre Viewport3DVisual.

Cette question n'a pas de réponse unique. Pour comprendre pourquoi, imaginez que vous êtes assis à votre table de cuisine et de manger le petit-déjeuner arrive de regarder par la fenêtre. Quelle est la gamme horizontale pouvez-vous voir? Eh bien, vous pouvez voir à environ cinq miles de ces montagnes bleues dans le lointain, mais seulement trente pieds de votre médisant. En d'autres termes, la zone visible n'est pas un prisme rectangulaire mais plutôt une pyramide.

La ligne de fond est, vous devrez spécifier la distance à parcourir avant qu'il ne soit significative quelle plage horizontale et verticale sont visibles à travers la fenêtre.

Une fois que vous avez spécifié une distance, voici comment mapper votre fenêtre aux points 3D sur un plan donné sans faire vous-même tous les calculs:

  1. Créer un modèle dans un Viewport3dVisual séparé, en utilisant les mêmes réglages de l'appareil, mais avec un modèle constitué uniquement d'un seul grand rectangle à la distance souhaitée.
  2. Utilisez-test a frappé pour tester chaque coin de la fenêtre, receving un rappel de résultat de test de recherche.
  3. Extraire les coordonnées du rectangle du résultat de test de recherche et de les utiliser pour vos calculs.

Cette technique a l'avantage de fonctionner de manière fiable chaque fois que la caméra peut être confronté, et fonctionne même pour les caméras animés et autres.

Note: Si j'ai mal compris la question, et vous demandons simplement à tracer des rangées de tuiles en 2D qui contiendra le contenu 3D, vous pouvez obtenir l'effet que vous décrivez en utilisant simplement un WrapPanel. Si vous voulez lier des données, utilisez un ItemsControl ou ListBox avec un ItemPanelTemplate d'un WrapPanel.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top