Roullakis Ответов: 1

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 скомпилирован правильно.

1 Ответов

Рейтинг:
11

Roullakis

Решенный. Кажется, это VertexData.Длина должна быть разделена на 3 (в соответствии с количеством координат).