Я вижу ту же проблему, что и Rodrigo - у вас есть несоответствие типов данных, как вы можете видеть здесь:
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(int)*nbVBOInd, VBOInd, GL_STATIC_DRAW);
sizeof (int) - использование целочисленного типа
glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_SHORT, BUFFER_OFFSET(0));
GL_UNSIGNED_SHORT - использование короткого типа
в соответствии со спецификацией openGL, для glDrawElements возможны только типы данных без знака. Чтобы это исправить, вам нужно:
изменить VBOInd на тип без знака в объявлении, например:
unsigned int* VBOInd = new unsigned int[nbVBOInd]
заменить 6-й вызов на
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(unsigned int)*nbVBOInd, VBOInd, GL_STATIC_DRAW);
заменить 11-й (последний) вызов на
glDrawElements(GL_TRIANGLES, nbVBOInd, GL_UNSIGNED_INT, BUFFER_OFFSET(0));
В любом случае, я считаю, что проблема скрыта в настройке указателя, измените 9-й вызов на :
glVertexPointer(3, GL_FLOAT, 0, BUFFER_OFFSET(0));
Если это не сработает, пожалуйста, покажите нам, как glVertex и VBOInd объявляются и заполняются данными. Может быть, вы используете std :: vector? Вам нужно вызвать эти контейнеры данных как:
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(unsigned int)*nbVBOInd, &VBOInd[0], GL_STATIC_DRAW);
Если что-то неясно, просто спросите в комментариях ..