因此,我正在编写一个程序,它用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,但我找不到任何SharpGL例子的VBO或显示列表。所以,知道我要做的是‘重新绘制’的图片后,每一条线是绘制。我想当这个方法被调用时,它会把所有的东西都画到那个点。但它仍然‘批’它,并显示所有的数据在一次,我如何能够动画?我非常绝望,我不认为彻底学习OpenGL或DirectX对于这么简单的任务是可行的。
发布于 2014-05-28 14:41:03
经过大量的修改后,我选择了使用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++;
}https://stackoverflow.com/questions/22260341
复制相似问题