glEnableVertexAttribArray(positionIndex);
glVertexAttribPointer(positionIndex, 2, GL_FLOAT, GL_FALSE, 0, vertices);
Эта строка неверна:
glDisableVertexAttribArray(positionIndex);
Не отключайте ее перед использованием, иначе вы потеряете ее
Кроме того, поскольку вы используете vboдля ваших вертов вам не нужно делать это:
glVertexAttribPointer(positionIndex, 2, GL_FLOAT, GL_FALSE, 0, vertices);
Просто переключите его на это:
glVertexAttribPointer(positionIndex, 2, GL_FLOAT, GL_FALSE, 0, (void*)0);
У вас есть привязанный vbo к GPU, он будет использовать этобуфер для рисования.Используйте glVertexAttribPointer
для определения смещения в vbo, он найдет первый элемент для данного атрибута.
@ kibab Предложение, которое я сделал для vbo, верно.
Он получил EXC_BAD_ACCESS
из-за того, что его атрибут не привязан к шейдеру.Смотрите комментарии ниже.Что касается MVP, вы не правы, опять же.Mvp предназначен для преобразования точек в систему координат -1.0, -1.0
, в 1.0, 1.0
.Значение его вершин должно отображаться с учетом их значений.
См. http://flylib.com/books/2/789/1/html/2/images/03fig02.jpg.
Также изменение координаты z ничего не даст для вас.Измените вашу вершину, чтобы начать с -1,0, -1,0 и перейти к 1,0,1,0 в полноэкранном режиме, чтобы мы могли что-то отобразить на экране.
Предполагая, что вы не используете яблочные классы gl, ваш glViewPort не устанавливается.
Попробуйте использовать размер границ вашего представления
glViewport(0, 0, bouds.width, bounds.height);
Также, пожалуйста, укажите свойverts на 0.0 z вместо -1.0
Также давайте попробуем это, просто чтобы выяснить, что происходит не так!Попробуйте не использовать объект буфера вершин и передавать его прямо так.Также не беспокойтесь об отключении вашего атрибута в данный момент, давайте сначала что-нибудь выведем на экран.
GLfloat vertices[] = {
-1.0f, -1.0f, 0.0f,
1.0f, -1.0f , 0.0f,
-1.0f, 1.0f , 0.0f,
1.0f, 1.0f , 0.0f,};
glVertexAttribPointer(positionIndex,3,GL_FLOAT,0,0,vertices);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);