Pregunta
empecé a aprender un poco de 3D en WPF hoy y he copiado algunos ejemplos simples (planos) en mi XAML, y todos ellos trabajaba. Sin embargo, cuando ajusté las coordenadas del plano de la cámara y de conocer a mis necesidades, siempre veo nada.
No sé lo que estoy haciendo mal, y yo también ya esbozado la escena (muy simple) 3D para verificar mis datos, y todo me parece correcto.
Podría alguien por favor, compruebe lo siguiente XAML y dime lo que estoy haciendo mal? Yo sólo quiero crear un avión en el x-z-plano, es decir, una especie de "baja" con la cámara mirando hacia abajo en él desde la parte superior.
<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: acabo experimentado con la posición de la cámara y LookDirection, y finalmente vi algo cuando he cambiado el LookDirection ser no es perpendicular para el avión, por ejemplo:
<PerspectiveCamera Position="0 2 0"
LookDirection="0 -2 1"
FieldOfView="60"/>
¿Es este comportamiento normal?
Muchas gracias!
gehho.
Solución
Cuando usted está apuntando la cámara, es importante tener cuidado con la Hasta vector , así como la dirección de la mirada.
El problema viene del valor por defecto para el vector Up (PerspectiveCamera.UpDirection
), que es [0,1,0]. Look Up vectores y de la cámara no debe ser paralela, ya que en ese caso sería imposible decir qué camino es hacia arriba.
Debido a que su modelo está en el plano XZ, y quiere mirar hacia abajo sobre ella, sólo tiene que establecer UpDirection a [0,0,1] o [1,0,0], de modo que los puntos en la dirección ya sea de la Z o el eje X, respectivamente. Pero si usted está planeando en permitir la cámara para mirar en todas las direcciones, usted debe tomar el cuidado del vector hacia arriba también.