Problem mit OpenGL VertexBuffer
-
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...
system: windows
sprache: c# (.net 2.0)
api: opengl 2.0 (tao framework)class RenderGL { Form window = new Form(); SimpleOpenGlControl control = new SimpleOpenGlControl(); private IntPtr id = new IntPtr(); 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.ToInt32()); Gl.glBufferDataARB( Gl.GL_ARRAY_BUFFER_ARB, new 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.ToInt32()); 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(); } }
-
siehst du dein Dreieck denn, wenn du es mit glBegin usw. machst, also sprich ist die View-Matrix auch korrekt gesetzt?
-
Hmm, du hast in der Render-Funktion keine Matrix-Aufrufe.. kann daran liegen.
Wie sieht denn deine Resize-Funktion aus?glMatrixMode(GL_MODELVIEW); glLoadIdentity();Tu das mal nach glClear() rein.. und schau obs dann geht. Und am ende vor glFinish:
glMatrixMode(GL_PROJECTION); glLoadIdentity();HTH
rya.
-
Scorcher24 schrieb:
Und am ende vor glFinish:
glMatrixMode(GL_PROJECTION); glLoadIdentity();HTH
rya.Wieso dieser Quatsch? Warum soll er seine Proj-Matrix am Ende "kaputt" machen?
Und glFinish sollte man auch nicht benutze. SwapBuffer und gut is.