这是我使用的代码:
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 秒,在发布模式下约 4 秒。
但是,一旦更新了表面,旋转和平移操作就会非常流畅。
表面越小,更新越快。
是否有更有效的方法来更新表面位置/颜色缓冲区?
注意:在具有双显卡(Intel HD 4000 + GeForce GT 650M)的 Windows 7 笔记本电脑上使用 IlNumerics 3.2.2 社区版,并激活了 nvidia 卡。