Как и было обещано, рассматриваем еще два режима рисования треугольников STRIP и FAN.
Как обычно делаем стандартный проект, создадим переменную m_bMode, которая позволит переключаться между режимами STRIP и FAN. Сделаем обработчик левой кнопки:
void CExampleView::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default if(m_bMode) m_bMode = FALSE; else m_bMode = TRUE; InvalidateRect(NULL, FALSE); CView::OnLButtonDown(nFlags, point); }
Новая OnDraw(...) будет выглядеть так:
void CExampleView::OnDraw(CDC* pDC) { CRect clientRect; CExampleDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here GetClientRect(&clientRect); glViewport(0, 0, clientRect.right, clientRect.bottom); glClearColor (0.5, 0.5, 0.75, 1.0); // цвет фона glClear (GL_COLOR_BUFFER_BIT); // очистка буфера цвета glLineWidth (20); // размер точек glShadeModel(GL_SMOOTH); if(m_bMode) { glColor3f (1.0, 0.0, 0.5); glBegin (GL_TRIANGLE_STRIP); for(int i=0; i<=6; i++) { glVertex2f(0.0f, 0.0f); glVertex2f(0.5f*(float)cos(2*Pi*i/6), 0.5f*(float)sin(2*Pi*i/6)); } glEnd(); } else { glColor3f (1.0, 0.5, 0.5); glBegin (GL_TRIANGLE_FAN); glVertex2f(0.0f, 0.0f); for(int i=0; i<=6; i++) glVertex2f(0.5f*(float)cos(2*Pi*i/6), 0.5f*(float)sin(2*Pi*i/6)); glEnd(); } }
Ну вот и все. Мне кажется, что отличие режима STRIP от FAN очевидно. В режиме FAN - общая вершина, в режиме STRIP - общая грань.