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