Я новичок в 3D и анимации в WPF. Я пытался создать очень простую сцену из пола и двух кубов (ну, 3D-прямоугольники, прямоугольные призмы, как бы это ни называлось). У этой сцены есть перспективная камера, которую я пытаюсь оживить (я в основном хочу, чтобы она летала вокруг сцены).
Код очень прост, и я считаю, что в большинстве случаев это хороший подход. Ниже вы найдете соответствующие выдержки, а образец проекта можно скачать здесь .
XAML:
<Viewport3D ClipToBounds="false" IsHitTestVisible="false">
<!-- Camera -->
<Viewport3D.Camera>
<PerspectiveCamera x:Name="ViewportCamera"
Position="0 0 20"
LookDirection="40 40 0"
FarPlaneDistance="600"
UpDirection="0 0 1"
NearPlaneDistance="0.01"
FieldOfView="75" />
</Viewport3D.Camera>
<!-- Light -->
<ModelVisual3D>
<ModelVisual3D.Content>
<DirectionalLight Direction="1 0.5 1" />
</ModelVisual3D.Content>
</ModelVisual3D>
<ModelVisual3D>
<!-- Floor -->
<local:CubeControl Color="Black" Size="300,300,1" Center="0,0,0" />
<local:CubeControl Color="LightGray" Size="15,25,40" Center="40,40,20" />
<local:CubeControl Color="LightGray" Size="25,20,60" Center="40,-40,30" />
</ModelVisual3D>
</Viewport3D>
VB:
Dim tAnimation As New Vector3DAnimation(ViewportCamera.LookDirection, New Vector3D(40, -40, -20), New Duration(TimeSpan.FromMilliseconds(1000)))
ViewportCamera.BeginAnimation(PerspectiveCamera.LookDirectionProperty, tAnimation)
Dim tAnimation2 As New Point3DAnimation(ViewportCamera.Position, New Point3D(-10, -10, 30), TimeSpan.FromMilliseconds(1000))
ViewportCamera.BeginAnimation(PerspectiveCamera.PositionProperty, tAnimation2)
Анимация запускается, как и ожидалось, когда окно очень маленькое (около 320х240). При увеличении размера окна анимация мерцает, и кажется, что целые кадры пропускаются, в результате чего появляется белый экран. В большом окне (1920x1080) анимация практически не видна (все остается пустым, пока камера не будет установлена в новое положение).
Почему-то это похоже на эту проблему , но это не помогло мне.
Это очень простая анимация, и я не могу поверить, что у WPF есть какие-либо проблемы с этим, поэтому я думаю, что делаю что-то не так.
Может кто-нибудь помочь мне понять, почему? Я потратил на это более чем достаточно времени.
Заранее спасибо!