Вот код, я использую:Как эффективно построить большую поверхность (например, 1000x1000) в ILNumerics?
public partial class Form1 : Form
{
private ILPlotCube plotcube_ = null;
private ILSurface surface_ = null;
public Form1()
{
InitializeComponent();
ilPanel1.Driver = RendererTypes.OpenGL;
}
private void ilPanel1_Load(object sender, EventArgs e)
{
var scene = new ILScene();
plotcube_ = scene.Add(new ILPlotCube(twoDMode: false));
plotcube_.MouseDoubleClick += PlotCube_MouseDoubleClick;
ilPanel1.Scene = scene;
}
private void PlotCube_MouseDoubleClick(object sender, ILMouseEventArgs e)
{
ResetSurface();
e.Cancel = true;
e.Refresh = true;
}
private void ResetSurface()
{
using (ILScope.Enter())
{
ILArray<float> array = ILMath.tosingle(ILSpecialData.sincf(1000, 1000));
if (surface_ == null)
{
surface_ = new ILSurface(0);
surface_.Fill.Markable = false;
surface_.Wireframe.Visible = false;
plotcube_.Add(surface_);
}
surface_.UpdateColormapped(array);
surface_.UseLighting = false;
}
plotcube_.Plots.Reset();
}
}
Каждый вызов ResetSurface() занимает несколько секунд, чтобы завершить: ~ 6с в Debug и ~ 4s в режиме выпуска.
После того, как поверхность обновлена, операции поворота и поворота очень текучие.
Чем меньше поверхность, тем быстрее обновление.
Есть ли более эффективный способ обновления буферов поверхности/цветов?
Примечание: с использованием IlNumerics 3.2.2 Community Edition на ноутбуке Windows 7 с двойной графикой (Intel HD 4000 + GeForce GT 650M) с активированной картой nvidia.
Если я правильно догадываюсь, трудоемкая операция - это выяснить, какие элементы сцены должны быть визуализированы. Зная, что моя конечная цель на самом деле состоит в двух графиках: поверхность с TwoDMode = true и только использование цветовой карты для представления высот, не было бы способа построить ее более эффективно? Если бы я построил плоскую поверхность и отобразил цвет в соответствии с высотами, будет ли это работать быстрее? (В настоящее время я не могу проверить это, но попробую как можно скорее.) – ice
Пожалуйста, сообщите о своем завершении! Я также отредактировал ответ. –
С версии 4.1 [ImageSCPlots] (http://ilnumerics.net/imagesc-plots.html) есть те, которые намного более тонкие и должны решить вашу проблему. –