1

そのため、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();

            }

即時モードが私の超初心者であることは知っていますが、VBOまたは表示リストのSharpGLの例が見つかりません。だから私がやりたいことは、各線が描かれた後に絵を「再描画」することです。フラッシュメソッドが呼び出されると、その時点までのすべてが描画されると思いました。しかし、それでも「バッチ処理」され、すべてのデータが一度に表示されます。これをアニメーション化するにはどうすればよいですか? 私は信じられないほど絶望的です。OpenGL や DirectX を徹底的に学習することは、このような単純なタスクには実用的ではないと思います。

4

1 に答える 1

1

多くのいじくり回した後、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++;
 }
于 2014-05-28T14:41:03.207 に答える