我今天开始学习一些3D的WPF和我抄一些简单的例子(飞机)到我的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>

编辑:我只是尝试用摄像机的位置和LookDirection,终于看到了一些东西,当我改变了LookDirection是不垂直,以飞机,例如:

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

这是正常的行为?

非常感谢!

gehho。

有帮助吗?

解决方案

当你指着摄像机,它要提防的向上向量是重要以及查找方向。

在问题来自于向上矢量缺省值(PerspectiveCamera.UpDirection),其是[0,1,0]。相机的外观和向上向量不能是平行的,因为在这种情况下,这将是不可能告诉哪个方向是向上。

由于模型是在XZ平面,并且要小看它了,你可以简单地设置UpDirection为[0,0,1]或[1,0,0],所以在方向上来分的Z或分别沿X轴,。但是,如果你在使相机在各个方向看规划,你应该考虑向上向量的照顾了。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top