【问题标题】:Remove a ScreenSpaceLines3D Object from a ViewPort?从视口中删除 ScreenSpaceLines3D 对象?
【发布时间】:2013-11-28 06:01:48
【问题描述】:

我正在用 VB 中的 WPF 制作 3D 游戏,我正在使用我找到的 ScrennSpaceLines3D 对象 http://3dtools.codeplex.com/releases/view/2058 但是当我尝试删除一条线时,我使用

添加到视口中
    mainViewport.Children.RemoveAt(i)

它给出了 NullExceptionError。我读过这是因为它并没有完全脱离渲染队列。已经有针对 c# 的修复程序,但我还没有找到适用于 VB 的修复程序。有没有办法使这项工作或可能以其他方式在 3D 空间中画一条线?我觉得 VB 甚至没有办法轻松绘制 3D 线,这很荒谬......

【问题讨论】:

  • 我觉得 .Net 也没有提供像样的图表工具这很荒谬......但我们无能为力。你考虑过学习 C# 吗? :)。另外,您在ScrennSpaceLines3D 中有一个错字,应该是Screen 我相信... [似乎您使用的那个库自2007 年以来就没有更新...只是说...]
  • 嗯,我不学 C# 的 2 个原因: 1. 我的计算机课使用 VB。 2.我宁愿用C++也不愿用C#,但我都不能用所以没关系。

标签: wpf vb.net dll 3d nullreferenceexception


【解决方案1】:

我参加聚会有点晚了,但我遇到了同样的问题。

发生访问冲突是因为每个实例都向合成目标的 Rendering 事件注册了一个事件处理程序

public ScreenSpaceLines3D()
{
    ...

    CompositionTarget.Rendering += OnRender; // <-- this line
}

但是当实例从场景中移除时忘记移除它。

所以要解决这个问题,你需要接触源代码:

public ScreenSpaceLines3D()
{
    ...

    // event registration removed
}

private bool AttachedToCompositionTargetRendering { get; set; }

protected override void OnVisualParentChanged(DependencyObject oldParent)
{
    base.OnVisualParentChanged(oldParent);

    var parent = VisualTreeHelper.GetParent(this);

    if (parent == null)
    {
        if (AttachedToCompositionTargetRendering)
        {
            CompositionTarget.Rendering -= OnRender;

            AttachedToCompositionTargetRendering = false;
        }
    }
    else
    {
        if (!AttachedToCompositionTargetRendering)
        {
            CompositionTarget.Rendering += OnRender;

            AttachedToCompositionTargetRendering = true;
        }
    }
}

【讨论】:

    【解决方案2】:

    移除 ScreenSpaceLines3D :

                foreach (ScreenSpaceLines3D line3D in lines3DList)
                {
                    lines3D.Points.Clear(); // Very importante
                    _viewport3D.Children.Remove(lines3D);
                 }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-23
      • 2021-03-11
      • 1970-01-01
      • 1970-01-01
      • 2016-06-24
      • 1970-01-01
      • 1970-01-01
      • 2017-10-27
      相关资源
      最近更新 更多