2015-07-22 3 views
0

Я пытаюсь создать тонко триангулированную сетку. В функции вытяжки:Создание плоскости с треугольными полосками

// Draws triangular strip as only lines 
glPolygonMode(GL_FRONT_AND_BACK,GL_LINE); 

// Create Cloth Mesh 
glBegin(GL_TRIANGLE_STRIP); 
glNormal3f(0,0,1); 

for(float i = 0.0 ; i < 2.0; i+=.05) 
{ 
    for(float j = -1.0 ; j < 1.0 ; j+=.05) 
    { 
     glVertex3f(j,1-i+.05,0); 

     glVertex3f(j,1-i,0); 
    } 
} 


glEnd(); 

я получаю следующий результат:

enter image description here

который я, что я ожидал.

Но если вращать сцену, я вижу это на обратной стороне:

enter image description here

(если его не ясно, ее слабо освещено сетки, но треугольники не являются такими же, как показывает на передний.)

Q1. Разве не должна быть видна задняя сторона? У меня есть этот флаг:

glEnable(GL_CULL_FACE); 
glCullFace(GL_BACK); 

Q2. Даже если задняя сторона появляется, почему она показывает эти нерегулярные длинные треугольники, а не те, что спереди?

P.S. Это функция изменения размера:

void MyGLWidget::resizeGL(int width, int height) 
{ 
int side = qMin(width, height); 
glViewport((width - side)/2, (height - side)/2, side, side); 

glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 

glOrtho(-2, +2, -2, +2, 1.0, 15.0); 
glMatrixMode(GL_MODELVIEW); 
} 

P.P.S: Да, я понимаю, что это не современный OpenGL.

ответ

2

Для меня это выглядит как треугольники, которые создаются треугольной полосой для «прыжка назад» влево. Это происходит, когда вы начинаете новую строку. В основном, они состоят из последних вершин предыдущей строки и первых вершин следующей строки. Похоже, что отбраковка задней поверхности работает, но большие треугольники видны сзади, потому что их порядок намотки прямо противоположен одному из маленьких треугольников.

Если вы не хотите их иметь, вам нужно либо сбросить треугольную полоску в конце каждой строки, либо использовать другую структуру (GL_TRIANGLES).