Problem mit OpenGL Vertex Buffer

Rhax

Grünschnabel
ich versuche gerade einen vertexbuffer zu implementieren, habe jedoch nicht viel erfolg. ich erhalte nur ein scharzes bild, es sollte aber ein gelbes dreieck zu sehen sein. mittlerweile bin ich unzählige tutorials durchgegangen (meist c/c++) und ich finde den fehler nicht...

hab schon viel rumprobiert und auch mit einem IntPtr statt float[] (für den Buffernamen) versucht. wo liegt der fehler?

system: windows
sprache: c# (.net 2.0)
api: opengl 2.0 (tao framework: open gl binding 2.1.0.4 + win platform api binding 1.0.0.4)

Code:
class RenderGL
{
    Form window = new Form();
    SimpleOpenGlControl control = new SimpleOpenGlControl();

    private float[] id = new float[1];
    float[] buffer = {3.0f, 3.0f, 0.0f,
                      9.0f, 3.0f, 0.0f,
                      3.0f, 9.0f, 0.0f};

    public RenderGL(string windowTitle)
    {
        title = windowTitle;

        window.ClientSize = new System.Drawing.Size(512, 512);
        window.Text = "RenderGL";
        window.Controls.Add(control);

        control.Dock = DockStyle.Fill;
        control.InitializeContexts();

        Gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
        Gl.glEnable(Gl.GL_DEPTH_TEST);

        Gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
        Gl.glMatrixMode(Gl.GL_PROJECTION);
        Gl.glLoadIdentity();
        Gl.glOrtho(0.0, 10.0, 0.0, 10.0, -1.0, 1.0);

        Gl.glGenBuffersARB(1, id);
        Gl.glBindBufferARB(Gl.GL_ARRAY_BUFFER, id[0]);
        Gl.glBufferDataARB(
            Gl.GL_ARRAY_BUFFER_ARB,
            (IntPtr)(buffer.Length * sizeof(float)),
            buffer,
            Gl.GL_STATIC_DRAW_ARB);

        window.Show();
    }

    // wird in der Hauptschleife aufgerufen
    public void Render()
    {
        Gl.glClear(Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT);

        Gl.glBindBufferARB(Gl.GL_ARRAY_BUFFER, id[0]);
        Gl.glVertexPointer(3, Gl.GL_FLOAT, 0, 0);

        Gl.glColor3f(1.0f, 1.0f, 0.0f);
        Gl.glEnableClientState(Gl.GL_VERTEX_ARRAY);
        Gl.glDrawArrays(Gl.GL_TRIANGLES, 0, buffer.Length / 3);
        Gl.glDisableClientState(Gl.GL_VERTEX_ARRAY);

        control.Draw();
    }
}
 

Neue Beiträge

Zurück