如何更新线框没有WPF按钮点击?

tcomlyy6  于 2023-10-22  发布在  其他
关注(0)|答案(1)|浏览(95)

我正在开发一个在WF中嵌入WPF用户控件的Windows窗体应用程序。如果我添加一个按钮并执行我的userControl.DrawWireFrameCube();我的ViewPort3D得到更新。我正在使用Hubble 3D Toolkit。但是如果我从我的MainWindowForm类调用我的方法,它不会被执行,UI也不会被更新,但是只有userControl.DrawWireFrameCube();不工作。另一个userControl.Draw3DObject(insertionPoint, points, color);方法工作得很好。

private void VisualizePart(int index)
        {
            InsertionPoint insertionPoint = new InsertionPoint
            {
                X = _duplicatedListParts[index].INFO1,
                Y = _duplicatedListParts[index].INFO2,
                Z = _duplicatedListParts[index].INFO3
            };

            DetailSize points = new DetailSize
            {
                Length = _duplicatedListParts[index].LENGTH,
                Width = _duplicatedListParts[index].WIDTH,
                Thickness = _duplicatedListParts[index].THICKNESS
            };
            userControl.Dispatcher.Invoke(() =>
            {
                System.Windows.Media.Color color = System.Windows.Media.Color.FromRgb(255, 90, 0);
                userControl.Draw3DObject(insertionPoint, points, color);
                userControl.DrawWireFrameCube();
            });
        }

不同之处在于,在Draw3DObject()中,我将项目添加到Model3DGroup,而在DrawWireFrameCube()中,我将项目添加到MyViewPort3D。我不使用XAML,我想保持这种方式。你知道这里出了什么问题吗?
P.S我喜欢不加解释的反对票:)

dbf7pr2w

dbf7pr2w1#

Hacker是一个很好的工具,我已经使用了一段时间。坦率地说,我切换到OpenGL的这种原因(线框/等)

  • Hacking并不给予你对着色器的访问权->意味着你需要有两个网格(一个用于模型,一个用于它的线框)

这既消耗内存(2个网格),又在修改网格(再次为2个网格)时消耗时间。使用着色器,你可以有一个网格和两个着色器(一个用于“经典”渲染,另一个用于线框)。然后奇迹发生在GPU上,并且非常快。修改网格是直接影响其线框,因为你有一个网格为两个…这是一个有点努力,但它是值得的。暂停和WPF(除非使用XNA)只是为了显示目的(切换到XAN和切换到OpenGL一样费力)

相关问题