1

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

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

任何人都可以检查以下 XAML 并告诉我我做错了什么吗?我只想在 xz 平面中创建一个平面,即某种“地板”,相机从顶部向下看。

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

这是正常行为吗?

非常感谢!

杰霍。

4

1 回答 1

2

当您指向相机时,重要的是要注意向上矢量以及 Look 方向。

问题来自于向上向量 ( PerspectiveCamera.UpDirection) 的默认值,即 [0,1,0]。相机的 Look 和 Up 向量不能平行,因为在这种情况下,无法判断哪条路是向上的。

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

于 2010-03-10T21:39:19.497 回答