所以我正在编写一个程序,该程序用XYZ点解析文件并制作一堆连接的行。我要做的是为每行绘制的每一行动画。我试图使用VBO和显示列表来提高性能(因为我正在处理大量数据点,即1,000,000点),但是我无法弄清楚如何在SharpGl中使用它们。因此,我现在要绘制的代码如下:
private void drawInput(OpenGL gl)
{
gl.Begin(OpenGL.GL_LINE_STRIP);
for (int i = 0; i < parser.dataSet.Count; i++)
{
gl.Color((float) i, 3.0f, 0.0f);
gl.Vertex(parser.dataSet[i].X, parser.dataSet[i].Y, parser.dataSet[i].Z);
gl.Flush();
}
gl.End();
}
我知道立即模式是我的超级noobzore5000,但是我找不到任何vbo或显示列表的尖锐示例。因此,知道我要做的是在绘制每行之后"重新绘制"图片。我认为当调用冲洗方法时,它将所有内容都吸引到那个点。但是它仍然"批处理"它,并立即显示所有数据,我该如何对此进行动画?我非常绝望,我认为对于这么简单的任务来说,彻底学习openGL或DirectX是实用的。
经过大量修补后,我选择与Opentk一起去,因为我最终确实弄清楚了Sharpgl的VBO,并且与Opentk相比,性能很糟糕。我将回答如何以我想要的方式进行动画。
我的解决方案可以立即使用并使用VBO。主要概念是使成员整数(AnimationCount)每次调用涂料功能并绘制到该数字时都会增加。
。立即模式:
private void drawInput(OpenGL gl)
{
gl.Begin(OpenGL.GL_LINE_STRIP);
for (int i = 0; i < animationCount; i++)
{
gl.Color((float) i, 3.0f, 0.0f);
gl.Vertex(parser.dataSet[i].X, parser.dataSet[i].Y, parser.dataSet[i].Z);
}
gl.End();
animationCount++;
}
或
vbo:
private void glControl1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
GL.DrawArrays(PrimitiveType.LineStrip, 0, animationCount);
animationCount++;
}