Полигон в OpenGL - PullRequest
       3

Полигон в OpenGL

2 голосов
/ 10 октября 2011

Может кто-нибудь объяснить мне, почему следующий код ничего не рисует, но если я использую GL_LINE_LOOP, он делает замкнутый цикл?

glBegin(GL_POLYGON);

for(int i = 0; i <= Ncircle; i++) { 
    tempAngle = angle + i*(2*M_PI - 2*angle)/Ncircle;
    glVertex3f(r*cos(tempAngle), r*sin(tempAngle), 0.0);
}
glVertex3f(l, 0, 0.0);
//glVertex3f(r*cos(angle), r*sin(angle), 0.0);

glEnd();

(Это в основном круг радиуса r и Θ в [-angle, angle] с треугольником высотой l на нем, так что угол выхода из круга равен углу треугольника:

result using GL_LINE_LOOP

1 Ответ

8 голосов
/ 10 октября 2011

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

Лицо многоугольника определяется положением экрана проецируемых вершин: если вершины против часовой стрелки, передняя грань видна, в противном случае задняя грань видна.

Чтобы контролировать выборку полигонов, см. GlCullFace.

Я предлагаю оставить стандартную предустановку отбраковки граней и выдавать вершины многоугольника против часовой стрелки. Отбраковка задней грани должна быть отключена, если на одной и той же геометрии показаны обе грани (передняя и задняя, ​​т. Е. Банка)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...