Вопрос
Сегодня я начал изучать 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>
Редактировать: Я просто поэкспериментировал с положением камеры и направлением взгляда и, наконец, увидел кое-что, когда изменил направление взгляда на не перпендикулярно к самолету, например:
<PerspectiveCamera Position="0 2 0"
LookDirection="0 -2 1"
FieldOfView="60"/>
Является ли это нормальным поведением?
Большое спасибо!
геххо.
Решение
Когда вы наводите камеру, важно следить за Восходящий вектор а также направление взгляда.
Проблема возникает из-за значения по умолчанию для восходящего вектора (PerspectiveCamera.UpDirection
), который равен [0,1,0].Векторы взгляда камеры и Вверх не должны быть параллельны, потому что в этом случае было бы невозможно определить, в какую сторону вверх.
Поскольку ваша модель находится в плоскости XZ, и вы хотите посмотреть на нее сверху вниз, вы можете просто настроить направление вверх на [0,0,1] или [1,0,0], чтобы вверх указывало направление оси Z или оси X соответственно.Но если вы планируете позволить камере смотреть во всех направлениях, вам также следует позаботиться о векторе вверх.