2009-12-13 2 views
2

J'ai une scène 3D assez simple qui est construit à peu près comme ceci:Obtenez Point3D par rapport au filet dans WPF

<Viewport3D> 
    <ModelVisual3D> 
    <ModelVisual3D.Content> 
     <Model3DGroup x:Name="Group1"> 
      <GeometryModel3D x:Name="m1">...</GeometryModel3D> 
     </Model3DGroup> 
     <Model3DGroup x:Name="Group2"> 
      <GeometryModel3D x:Name="m2">...</GeometryModel3D> 
     </Model3DGroup> 
     <Model3DGroup x:Name="Group3"> 
      <GeometryModel3D x:Name="m3">...</GeometryModel3D> 
     </Model3DGroup> 
    </ModelVisual3D.Content> 
    </ModelVisual3D> 
</Viewport3D> 

Et au fond chacune des 3 années GeometryModel3D a son propre Mesh, Transforms, etc ...

Lorsque je clique sur le Viewport3D, tout ce que j'obtiens est le point dans l'espace 3D sur lequel j'ai cliqué lorsque j'ai touché quelque chose. Ce que je suis vraiment après, c'est le point sur le mesh que je frappe dans l'espace 3D (pas un seul Point sur le mesh, mais plutôt le Point3D).

Le but pour moi est d'ajouter un nouveau matériau au clic sur Mesh au point exact où l'utilisateur clique. Et je ne peux pas faire cela si je n'ai accès qu'au Point3D par rapport à Viewport3D (à cause de toutes les transformations sur les maillages etc ...)

Un exemple pourrait être que la géométrie m1 est un rectangle de forme, avec quelques légères rotations et transformé l'axe Y en haut de l'écran.

Lorsque je clique sur le bas du filet, je voudrais obtenir XY (Z pas nécessaire ici) point par rapport à l'espace de coordonnées local de ce maillage ...

J'espère que toutes les marques sens, et merci pour toute aide que vous pouvez donner

Mark

+0

Matrice opération inverse pourrait probablement aider? – Makubex

Répondre

0

Je pense que ce que vous décrivez est en fait deux choses:

  1. projection Ray: salut donné une t-point sur la représentation 2D (c'est-à-dire l'écran), lancez un rayon à partir de ce point dans votre scène. Cela s'appelle alternativement "Unproject", car il repose en quelque sorte sur l'inversion de la matrice de transformation d'écran d'origine et la sélection de valeurs de "profondeur" minimum et maximum. Intersection Ray/Mesh hit: étant donné un Ray et un Mesh, trouvez où ils se rencontrent. Une variante légèrement généralisée est intersection Ray/Sphère Ray-Sphere Intersection

Découvrez le blog de ce gars-là, il a toutes les informations, je pense que vous aurez besoin: Daniel Lehenbauer's Blog

Questions connexes