SharpGL动画问题

时间:2014-03-07 20:45:52

标签: performance opengl animation graphics sharpgl

所以我正在编写一个用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或显示列表的任何SharpGL示例。所以知道我想要做的是在绘制每一行后“重绘”图片。我想当调用flush方法时,它会将所有内容都绘制到那一点。但它仍然“批量”它,并立即显示所有数据,我该如何设置动画?我非常绝望,我不认为彻底学习OpenGL或DirectX对于这么简单的任务是切实可行的。

1 个答案:

答案 0 :(得分:0)

经过大量的修补,我选择使用OpenTK,因为我最终确定了用于SharpGL的VBO,并且与OpenTK相比,性能是AWFUL。我将回答如何以我想要的方式制作动画。

我的解决方案适用于立即模式并使用VBO。主要概念是创建一个成员整数(animationCount),每次调用paint函数时都会增加该成员整数(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++;
 }