我今天开始在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。
答案 0 :(得分:2)
当您指向相机时,请务必注意向上矢量以及查看方向。
问题来自Up向量的默认值(PerspectiveCamera.UpDirection
),即[0,1,0]。相机的Look and Up向量不能是平行的,因为在这种情况下,不可能分辨出哪种方式。
由于您的模型位于XZ平面中,并且您想俯视它,您可以简单地将UpDirection设置为[0,0,1]或[1,0,0],以便向上指向方向分别为Z轴或X轴。但如果您打算让相机向各个方向看,那么您也应该关注向上矢量。