该项目使用 WPF 的 CompositionTarget.Rendering 执行基于帧的动画。在渲染过程中,当它想要更改 PerspectiveCamera 的位置或向量时,它会执行与此等效的操作:
CompositionTarget.Rendering += Loop;
private void Loop(object sender, EventArgs e)
{
// Change properties on the Camera
Camera.Position = new(1D, 2D, 3D); // Point3D
Camera.LookDirection = new(0D, 0D, 0D); // Vector3D
Camera.UpDirection = new(0D, 1D, 0D); // Vector3D
}
其中每一个都是相机上的依赖属性。该位置立即具有新值。但 LookDirection 和 UpDirection 都不会获得新值。当类似的语句在 CompositionTarget.Rendering 之外运行时,LookDirection 和 UpDirection 都将获得新值。关于如何从 CompositionTarget.Rendering 内部设置 LookDirection 和 UpDirection 有什么想法吗?
从 CompositionTarget 改变位置。渲染效果很好,相机的位置发生了变化。但 LookDirection 和 UpDirection 并未采用新值。我已经查看了 .Net 参考源,但没有发现任何问题。事实上,设置所有三个属性的代码路径几乎相同。
通过以这种方式设置属性解决了这个问题:
而不是
Camera.UpDirection = someVector;
将其编码为
Camera.SetCurrentValue(ProjectionCamera.UpDirectionProperty, someVector);