Question

J'ai commencé à apprendre quelques 3D dans WPF aujourd'hui et je copiais quelques exemples simples (plans) dans mon XAML, et ils ont tous travaillé. Toutefois, lorsque j'ai ajusté les coordonnées de l'appareil photo et l'avion pour répondre à mes besoins, je ne vois toujours rien.

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

Quelqu'un pourrait-il s'il vous plaît vérifier la XAML suivante et dites-moi ce que je fais mal? Je veux seulement créer un plan dans le plan x-z, à savoir une sorte de « plancher » avec la caméra regardant vers le bas dessus 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érimenté avec la position et LookDirection de la caméra, et enfin vu quelque chose quand je changé le LookDirection être non perpendiculaire au plan, par exemple:

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

Est-ce normal?

Merci!

gehho.

Était-ce utile?

La solution

Lorsque vous pointez l'appareil photo, il est important de surveiller le Up vecteur , ainsi que la direction de Look.

Le problème vient de la valeur par défaut pour le vecteur Up (de PerspectiveCamera.UpDirection), qui est [0,1,0]. Le regard de la caméra et les vecteurs ne doivent porter en parallèle, parce que dans ce cas, il serait impossible de dire quel est le haut.

Étant donné que votre modèle est dans le plan XZ, et que vous voulez regarder vers le bas dessus, vous pouvez simplement UpDirection à [0,0,1] ou [1,0,0], de sorte que des points dans la direction soit du Z ou de l'axe X, respectivement. Mais si vous avez décidé de permettre la caméra de regarder dans toutes les directions, vous devriez prendre soin du vecteur aussi.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top