Тот факт, что glBegin
и glEnd
находятся вне цикла, абсолютно не проблема.Рисование треугольников с использованием каждой вершины одна за другой - правильный путь.Он будет строить треугольную форму каждые 3 последовательных вершины, что вам и нужно.
Ваша проблема заключалась в том, что вы увеличили tLoop
внутри блока else и поэтому фактически пропускали каждый пятый индекс вместо каждого четвертого,Развертывание помешало этому, но это не имеет ничего общего с glBegin/glEnd
, не работающим вне цикла.Но, как сказано в комментарии, вам все равно не нужно tLoop
, так как вы можете просто использовать x
вместо:
glBegin(GL_TRIANGLES);
for(int x = 1; x < 4*numberOfTriangles+1; x++)
if(x % 4) //works if x starts at 1, though I don't know why x has to start at 1
glVertex3f(Vertices[Triangles[x]*3],Vertices[(Triangles[x]*3)+1],Vertices[(Triangles[x]*3)+2]);
glEnd();
или даже лучше развернуть цикл:
glBegin(GL_TRIANGLES);
for(int x = 1; x < 4*numberOfTriangles+1; x+=4) {
glVertex3f(Vertices[Triangles[x]*3],Vertices[(Triangles[x]*3)+1],Vertices[(Triangles[x]*3)+2]);
glVertex3f(Vertices[Triangles[x+1]*3],Vertices[(Triangles[x+1]*3)+1],Vertices[(Triangles[x+1]*3)+2]);
glVertex3f(Vertices[Triangles[x+2]*3],Vertices[(Triangles[x+2]*3)+1],Vertices[(Triangles[x+2]*3)+2]);
}
glEnd();
Но поместить glBegin/glEnd
внутрь цикла - это самая глупая вещь, которую вы можете сделать.На самом деле, если вы уже используете представление на основе массива вершин / индексов, вам будет довольно просто перенести код рендеринга на массивы вершин, которые намного быстрее, чем непосредственный режим, особенно при работе с VBO.