我正在开发一个有4个视口的WPF应用程序。我建立了一个相当复杂的3D模型,包含50,000-100,000个三角形。然后我想在所有4个视口中显示相同的3D模型。我这样做的方式,模型在所有4个视口中显示大约需要10秒钟(实际上是HelixViewports,来自Helix 3D Toolkit for WPF)。我从未使用多线程,但我认为这可能是一个好主意。我需要模型在不到2秒的时间内在所有4个视口中渲染。我可能也没有效率地编写我的代码,下面是一个示例。谢谢你的帮助!
Render()函数(C#):
//Each Viewport must have it's own ModelVisual3D
ModelVisual3D renderModel = new ModelVisual3D();
ModelVisual3D renderModel2 = new ModelVisual3D();
ModelVisual3D renderModel3 = new ModelVisual3D();
ModelVisual3D renderModel4 = new ModelVisual3D();
Model3DGroup modelGroup = new Model3DGroup();
//Here is an example of the 2 different ways
//I add components to the Models:
//Add the cylinder to the viewport
if (isCylinder)
{
//Each viewport must have its' own
PipeVisual3D ballBat = dO.getRound();
PipeVisual3D ballBat2, ballBat3, ballBat4;
ballBat2 = new PipeVisual3D();
ballBat2.Content = ballBat.Content;
ballBat3 = new PipeVisual3D();
ballBat3.Content = ballBat.Content;
ballBat4 = new PipeVisual3D();
ballBat4.Content = ballBat.Content;
this.mainViewport.Children.Add(ballBat);
this.mainViewport2.Children.Add(ballBat2);
this.mainViewport3.Children.Add(ballBat3);
this.mainViewport4.Children.Add(ballBat4);
}
//OR this way:
//Add inner top wane to the viewport
if (isTopWane)
{
modelGroup.Children.Add(dO.getTopWane());
}
//Add inner bottom wane to the viewport
if (isBottomWane)
{
modelGroup.Children.Add(dO.getBottomWane());
}
//Then, at the end of all my IF checks, this is how I
//'Draw' the models into the viewports:
//Each ModelVisual3D has the same content
renderModel2.Content = renderModel.Content;
renderModel3.Content = renderModel.Content;
renderModel4.Content = renderModel.Content;
//"Paint" the viewports
this.mainViewport.Children.Add(renderModel);
this.mainViewport2.Children.Add(renderModel2);
this.mainViewport3.Children.Add(renderModel3);
this.mainViewport4.Children.Add(renderModel4);
此外,它可能有助于知道我正在使用16GB内存,核心i7的笔记本电脑上测试此应用程序 处理器和NVIDIA Quadro 3000M显卡。我一直在寻找加速我的应用程序的方法,并将继续这样做,如果有人有建议或可以指出我有用的信息,将非常感谢!
答案 0 :(得分:0)
为什么不将整个模型放在一个GeometryModel3D中?你有35000-40000个三角形,这意味着你有35000-40000 GeometryModel3D!?这太棒了......
你应该有一个包含Model3DGroup的Visual(等于包含多个部分的场景或模型),包含与模型一样多的GeometryModel3D(而不是三角形!)。每个GeometryModel3D包含一个MeshGeometry3D,其中包含一个模型的所有三角形,索引,非法,uv坐标。