Frage

Ich begann heute einige 3D in WPF zu lernen, und ich kopiert einige einfache Beispiele (Ebenen) in meine XAML, und sie alle arbeiteten. Allerdings, wenn ich die Kamera und das Flugzeug des Koordinaten angepasst meine Bedürfnisse zu erfüllen, habe ich immer nichts sehen.

Ich weiß nicht, was ich falsch mache, und ich skizzierte auch schon die (wirklich einfach) 3D-Szene meine Daten zu überprüfen, und es scheint mir richtig.

Könnte jemand bitte das folgende XAML überprüfen und mir sagen, was ich falsch mache? Ich möchte nur eine Ebene in der x-z-Ebene schaffen, das heißt eine Art von „Boden“ mit der Kamera auf sie von oben nach unten.

<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: Ich habe gerade mit der Kamera Position und LookDirection experimentiert und schließlich etwas sah, als ich die LookDirection geändert zu sein, nicht senkrecht zur Ebene, zum Beispiel:

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

Ist das ein normales Verhalten?

Vielen Dank!

gehho.

War es hilfreich?

Lösung

Wenn Sie die Kamera gerichtet sind, ist es wichtig, für die Up Vektor aufpassen sowie die Blickrichtung.

Das Problem kommt aus dem Standardwert für den Up-Vektor (PerspectiveCamera.UpDirection), die [0,1,0] ist. Die Look der Kamera und Up-Vektoren müssen nicht parallel sein, denn in diesem Fall wäre es unmöglich, zu sagen, welche Art und Weise nach oben.

Da Ihr Modell ist in der XZ-Ebene, und Sie wollen über sie nach unten schauen, können Sie einfach festlegen Aufrecht-Richtung auf [0,0,1] oder [1,0,0], so dass bis in die Richtung entweder die Z oder X-Achse. Aber wenn man über die Gestattung der Kamera planen, in alle Richtungen zu betrachten, sollten Sie kümmern sich um die Up-Vektor zu nehmen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top