2010-03-10 6 views
1

J'ai commencé à apprendre de la 3D dans WPF aujourd'hui et j'ai copié quelques exemples simples (plans) dans mon XAML, et tout a fonctionné. Cependant, quand j'ai ajusté les coordonnées de l'appareil photo et de l'avion pour répondre à mes besoins, je ne vois toujours rien.Problèmes avec 3D WPF

Je ne sais pas ce que je fais de mal, et j'ai déjà esquissé la scène 3D (vraiment simple) pour vérifier mes données, et tout me semble correct.

Quelqu'un peut-il s'il vous plaît vérifier le XAML suivant et dites-moi ce que je fais mal? Je veux seulement créer un plan dans le plan x-z, c'est-à-dire une sorte de "sol" avec la caméra qui le regarde du haut.

<Viewport3D> 
    <Viewport3D.Camera> 
     <PerspectiveCamera Position="0 1 0" 
          LookDirection="0 -1 0" 
          FieldOfView="60"/> 
    </Viewport3D.Camera> 
    <Viewport3D.Children> 
     <ModelVisual3D> 
      <ModelVisual3D.Content> 
       <AmbientLight Color="White"/> 
      </ModelVisual3D.Content> 
     </ModelVisual3D> 
     <ModelVisual3D> 
      <ModelVisual3D.Content> 
       <GeometryModel3D> 
        <GeometryModel3D.Geometry> 
         <MeshGeometry3D> 
          <MeshGeometry3D.Positions> 
           <Point3D X="-1" Y="0" Z="1"/> 
           <Point3D X="1" Y="0" Z="1"/> 
           <Point3D X="1" Y="0" Z="-1"/> 
           <Point3D X="-1" Y="0" Z="-1"/> 
          </MeshGeometry3D.Positions> 
          <MeshGeometry3D.TriangleIndices> 
           0 1 2 0 2 3 
          </MeshGeometry3D.TriangleIndices> 
          <MeshGeometry3D.Normals> 
           <Vector3D X="0" Y="1" Z="0"/> 
           <Vector3D X="0" Y="1" Z="0"/> 
           <Vector3D X="0" Y="1" Z="0"/> 
           <Vector3D X="0" Y="1" Z="0"/> 
           <Vector3D X="0" Y="1" Z="0"/> 
           <Vector3D X="0" Y="1" Z="0"/> 
          </MeshGeometry3D.Normals> 
         </MeshGeometry3D> 
        </GeometryModel3D.Geometry> 
        <GeometryModel3D.Material> 
         <MaterialGroup> 
          <DiffuseMaterial> 
           <DiffuseMaterial.Brush> 
            <SolidColorBrush Color="Red" Opacity="0.75"/> 
           </DiffuseMaterial.Brush> 
          </DiffuseMaterial> 
         </MaterialGroup> 
        </GeometryModel3D.Material> 

       </GeometryModel3D> 
      </ModelVisual3D.Content> 
     </ModelVisual3D> 
    </Viewport3D.Children> 

</Viewport3D> 

EDIT: Je viens expérimenta avec la position de la caméra et LookDirection, et enfin vu quelque chose quand je changé le LookDirection être pas perpendiculaire au plan, par exemple:

<PerspectiveCamera Position="0 2 0" 
        LookDirection="0 -2 1" 
        FieldOfView="60"/> 

Est-ce que c'est un comportement normal?

Merci beaucoup!

gehho.

Répondre

2

Lorsque vous pointez la caméra, il est important de surveiller le Up vector ainsi que la direction du regard.

Le problème provient de la valeur par défaut du vecteur Up (PerspectiveCamera.UpDirection), qui est [0,1,0]. Les vecteurs Look et Up de la caméra ne doivent pas être parallèles, car dans ce cas il serait impossible de dire quelle est la position. Puisque votre modèle est dans le plan XZ et que vous voulez le regarder au-dessus, vous pouvez simplement régler UpDirection sur [0,0,1] ou [1,0,0], de sorte que les points dans le direction de l'axe Z ou X, respectivement. Mais si vous envisagez de permettre à la caméra de regarder dans toutes les directions, vous devriez aussi prendre soin du vecteur Up.

+0

Cela a fait l'affaire! Je n'ai pas pensé à ajuster la direction haute. Merci beaucoup! – gehho