Sharpgl всегда строит вершину в начале координат
Я создаю приветственный треугольник, используя приведенный ниже код. SharpGL, по-видимому, всегда строит вершину в начале координат (0,0). Это очевидно, когда PolygonMode изменяется на GL_POINT. При использовании DrawElements форма примитивного элемента искажается, так как он включает в себя исходную вершину. Этого не происходит с DrawArray, но исходная вершина все равно появляется. Нужно от него избавиться.
OpenGL gl = openGLControl.OpenGL; gl.LoadIdentity(); gl.PolygonMode(OpenGL.GL_FRONT_AND_BACK, OpenGL.GL_LINE); gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT); gl.Color(0f, 1.0f, 0.0f); float[] VertexData = { 0.5f, 0.5f, 0.0f, 0.5f, -0.5f, 0.0f, -0.5f, -0.5f, 0.0f }; uint[] ElementData = { 0, 1, 2 }; uint[] VertexBuffer = new uint[1]; gl.GenBuffers(1, VertexBuffer); gl.BindBuffer(OpenGL.GL_ARRAY_BUFFER, VertexBuffer[0]); IntPtr ptr1 = GCHandle.Alloc(VertexData, GCHandleType.Pinned).AddrOfPinnedObject(); gl.BufferData(OpenGL.GL_ARRAY_BUFFER, VertexData.Length * sizeof(float), ptr1, OpenGL.GL_STATIC_DRAW); uint[] ElementBuffer = new uint[1]; gl.GenBuffers(1, ElementBuffer); gl.BindBuffer(OpenGL.GL_ELEMENT_ARRAY_BUFFER, ElementBuffer[0]); IntPtr ptr2 = GCHandle.Alloc(ElementData, GCHandleType.Pinned).AddrOfPinnedObject(); gl.BufferData(OpenGL.GL_ELEMENT_ARRAY_BUFFER, ElementData.Length * sizeof(int), ptr2, OpenGL.GL_STATIC_DRAW); uint[] VertexArrayID = new uint[1]; gl.GenVertexArrays(1, VertexArrayID); gl.BindVertexArray(VertexArrayID[0]); gl.EnableVertexAttribArray(0); gl.VertexAttribPointer(0, 3, OpenGL.GL_FLOAT, true, 0, IntPtr.Zero); gl.DrawElements(OpenGL.GL_TRIANGLES, VertexData.Length, ElementData); gl.DisableVertexAttribArray(0);
Что я уже пробовал:
Подтверждено, что массив VertexData скомпилирован правильно.