Шаг 25 - Треугольник. Режимы STRIP и FAN

Как и было обещано, рассматриваем еще два режима рисования треугольников 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 - общая грань.

Шпаргалка

  1. Хватит смотреть в шпаргалку.
  2. Берешь и делаешь.

Загрузить проект | Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Kirill V. Ratkin - 25.05.2000