3D WPF的问题

时间:2010-03-10 16:18:24

标签: wpf 3d viewport3d

我今天开始在WPF中学习一些3D,并将一些简单的例子(平面)复制到我的XAML中,它们都有效。但是,当我调整相机和飞机的坐标以满足我的需求时,我总是看不到任何东西。

我不知道我做错了什么,而且我已经勾画了(非常简单的)3D场景以验证我的数据,这对我来说似乎都是正确的。

有谁可以请检查以下XAML并告诉我我做错了什么?我只想在x-z平面上创建一个平面,即某种“地板”,相机从顶部俯视它。

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

编辑:我刚刚尝试了相机的Position和LookDirection,当我将LookDirection更改为不垂直到平面时,终于看到了一些东西,例如:< / p>

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

这是正常行为吗?

非常感谢!

gehho。

1 个答案:

答案 0 :(得分:2)

当您指向相机时,请务必注意向上矢量以及查看方向。

问题来自Up向量的默认值(PerspectiveCamera.UpDirection),即[0,1,0]。相机的Look and Up向量不能是平行的,因为在这种情况下,不可能分辨出哪种方式。

由于您的模型位于XZ平面中,并且您想俯视它,您可以简单地将UpDirection设置为[0,0,1]或[1,0,0],以便向上指向方向分别为Z轴或X轴。但如果您打算让相机向各个方向看,那么您也应该关注向上矢量。