C# 如何解决helix3d模型中的缩放/定位问题?

C# 如何解决helix3d模型中的缩放/定位问题?,c#,sharpdx,helix-3d-toolkit,C#,Sharpdx,Helix 3d Toolkit,问题: 我正在尝试使用helixtoolkit.wpf.sharpdx创建和渲染详细的建筑模型。模型的某些部分(主要是房屋内部的详细家具和管道结构)在第一眼看到时就被错误地缩放和定位。 我是新来的,没有足够的声誉发布图片 然而,如果我小心地将我的视点(相机?)移入房子,一些内部结构就会开始显示出来。在对房子的整个内部空间进行了漫游,并将我的视角拉回到外部世界后,渲染的场景看起来非常完美。 (三维模型的计算和装配过程应正确。) 问题: 我有没有错过什么重要的一步 是否有可能的变通方法来确保场景

问题:

我正在尝试使用helixtoolkit.wpf.sharpdx创建和渲染详细的建筑模型。模型的某些部分(主要是房屋内部的详细家具和管道结构)在第一眼看到时就被错误地缩放和定位。
我是新来的,没有足够的声誉发布图片

然而,如果我小心地将我的视点(相机?)移入房子,一些内部结构就会开始显示出来。在对房子的整个内部空间进行了漫游,并将我的视角拉回到外部世界后,渲染的场景看起来非常完美。

(三维模型的计算和装配过程应正确。)

问题:

  • 我有没有错过什么重要的一步
  • 是否有可能的变通方法来确保场景正确渲染
  • 我是否可以并且应该尝试以编程方式“漫游”摄影机以获得正确渲染的场景
  • 希望我已经足够清楚地描述了我的问题。 任何建议都是有帮助的

    Model3DCollection collection; //pre-assembled data
    ObservableElement3DCollection obCollection = new ObservableElement3DCollection();
    foreach (var m3d in collection)
    {
        if (m3d is GeometryModel3D gm3D)
        {
            MeshGeometry3D meshGeometry3D = gm3D.Geometry as MeshGeometry3D;
            HelixToolkit.Wpf.SharpDX.MeshGeometry3D meshGeometry = CastGeometry(meshGeometry3D);
            var model = new MeshGeometryModel3D()
            {
                Material = CastMaterial(gm3D.Material),
                Transform = m3d.Transform,
                Geometry = meshGeometry,
                CullMode = CullMode.Front
            };
            meshGeometry.UpdateOctree();
            obCollection.Add(model);
        }
    }
    OnPropertyChanged(nameof(obCollection));
    //...
    

    您是否使用单独的线程而不是UI线程来加载模型

    似乎转换没有得到更新

    确保以下内容正在UI线程中运行:

            var model = new MeshGeometryModel3D()
            {
                Material = CastMaterial(gm3D.Material),
                Transform = m3d.Transform,
                Geometry = meshGeometry,
                CullMode = CullMode.Front
            };
            obCollection.Add(model);
    

    谢谢你的建议。我检查了我的代码。我确实使用了
    SynchronizationContext.Post
    而不是
    Send
    ,这可能有点异步。然而,在使用
    Send
    进行测试后,结果并没有得到任何改善。目前,我正在尝试使用HelixToolkit的WPF版本,而不是WPF.SharpDX版本。到目前为止,只出现了几处人脸正常误计算错误,整个场景看起来不错。但当模型变得更大时,我担心性能问题。我被告知SharpDX版本提供更好的性能,因此如果问题能够得到解决,这将是最好的。如果您可以创建一个示例项目来显示此问题,这将非常有用。您还可以尝试在helixtoolkit Sharpdx示例中运行文件加载演示,看看您的模型是否可以正确加载。在检查了大多数
    Viewport3DX
    渲染开关后,我发现了一个名为
    EnableDeferredRendering
    的开关,用于启用多线程渲染。但是,此函数会导致延迟(延迟?)渲染效果,不幸的是,这可能会创建场景中漂浮的所有“待渲染”巨大黑色对象。所以你可能对一些没有更新的东西是正确的。通过将其设置为
    False
    ,现在一切正常。但是,我相信我的程序将需要
    enabledferredrendering
    函数提供的性能提升,因此我提出以下问题:如何确定场景是否已完成渲染?是否有我可以监控的相关状态?谢谢需要渲染多少个模型?通常,仅当场景有数千个绘制调用时,延迟渲染才有好处。