Domanda

ho iniziato a imparare alcuni 3D in WPF oggi e ho copiato alcuni semplici esempi (aerei) nel mio XAML, e tutti hanno lavorato. Tuttavia, quando ho regolato le coordinate della fotocamera e il piano per soddisfare le mie esigenze, ho sempre vedo nulla.

Non so quello che sto facendo male, e ho anche già abbozzato il (molto semplice) scena 3D per verificare i miei dati, e tutto sembra corretto per me.

Qualcuno potrebbe verificare quanto segue XAML e dimmi che cosa sto facendo male? Ho solo voglia di creare un aereo in x-z-piano, vale a dire una sorta di "piano" con la macchina fotografica guardando verso il basso su di esso dalla parte superiore.

<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>

Modifica Ho appena sperimentato con Posizione e LookDirection della fotocamera, e, infine, ho visto qualcosa quando ho cambiato il LookDirection essere non perpendicolare per l'aereo, per esempio:

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

È normale?

Molte grazie!

gehho.

È stato utile?

Soluzione

Quando si punta la fotocamera, è importante guardare fuori per il Fino vettore , così come la direzione Look.

Il problema deriva dal valore di default per il vettore Up (PerspectiveCamera.UpDirection), che è [0,1,0]. Guardate e Up vettori della fotocamera non devono essere paralleli, perché in tal caso sarebbe impossibile dire in che modo è in su.

Dal momento che il modello è nel piano XZ, e si vuole guardare in basso su di esso, si può semplicemente impostare UpDirection di [0,0,1] o [1,0,0], in modo che i punti nella direzione di Z o l'asse X, rispettivamente. Ma se state pensando di permettendo alla fotocamera di guardare in tutte le direzioni, si dovrebbe prendere cura del vettore troppo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top