题
我今天开始学习一些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轴,。但是,如果你在使相机在各个方向看规划,你应该考虑向上向量的照顾了。
不隶属于 StackOverflow