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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top