Шаг 21 - Линии

В этом шаге рассмотрим рисование обычных линий.

Как обычно создадим MFC проект, сделаем все необходимые дополнения для OpenGL. Добавим переменную BOOL m_Strip как private элемент класса C...View. Добавим обработчик OnLButtonDown(...):

void CExampleView::OnLButtonDown(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	if(m_Strip)
		m_Strip = FALSE;
	else
		m_Strip = TRUE;
	InvalidateRect(NULL, FALSE);
	CView::OnLButtonDown(nFlags, point);
}

В конструкторе класса C...View присвоим этой переменной значение FALSE.

Новая функция 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);			// размер точек
	glColor3f (1.0, 0.0, 0.5);		// текущий цвет примитивов

	if(!m_Strip)
		glBegin (GL_LINES);
	else
		glBegin (GL_LINE_STRIP);
	
		glVertex2f(-0.5f,0.5f);
		glVertex2f(0.5f,-0.5f);
		glVertex2f(-0.5f,-0.5f);
		glVertex2f(0.5f,0.5f);
	glEnd();
}

Программа просто рисует диагонали в центре окна, а при нажатии на кнопку мыши замыкает их. Как нетрудно догадаться, рисование линий включается с помощью аргумента GL_LINES функции glBegin. А рисование линий в режиме "последняя точка предыдущей линии - это первая точка следующей" включается аргументом GL_LINE_STRIP.

Соберите проект и понажимайте левую кнопку мыши.

Шпаргалка

  1. Создать OpenGL проект.
  2. Создать логическую переменную для переключения и присвоить ей значение по умолчанию.
  3. Создать обработчик мыши и менять значение логический переменной на обратное.
  4. В OnDraw обрабатывать состояние логической переменной.

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