Камера. Сетка из линий. Использование алгоритма Брезенхема

Загрузить архив с примерами ЗДЕСЬ.

Ранее в примере для рисования сетки из линий мы использовали функции GDI MoveToEx() и LineTo(). Эти функции сами производят отсечение в экранных координатах. Например следующий код корректно обрежет и отобразит линию несмотря на то что x2 имеет отрицательное значение:


#define _WIN32_WINNT 0x0500
#include <windows.h>
#include <stdio.h>

int main(void)
{
	HWND hWnd = GetConsoleWindow();

	HDC hDC = GetDC(hWnd);

	HPEN hPen = CreatePen(PS_SOLID, 4, RGB(255, 255, 127));
	HPEN hOldPen = (HPEN) SelectObject(hDC, hPen);

	int x1 = 50;
	int y1 = 50;

	int x2 = -50;
	int y2 = 150;

	MoveToEx(hDC, x1, y1, NULL);
	LineTo(hDC, x2, y2);

	getchar();

	SelectObject(hDC, hOldPen);
	DeleteObject(hPen);
	ReleaseDC(hWnd, hDC);

	return 0;
}

Теперь в этом примере мы будем сами рисовать линии при помощи алгоритма Брезенхема и нам самим нужно отсекать линии в экраннх координатах. В примере использовалась функция DrawDibDraw.

Код примера можно загрузить /src/03.003-draw_field_brezenhame/Draw_Field_Brezenhame.

После запуска примера перемещатся по сцене можно с помощью клавиш W,S,A,D и поворачивать камеру мышей.

Камера. Сетка из линий. Использование алгоритма Брезенхема

Теперь давайте повернем сетку на 90 градусов по оси X что бы продемонстрировать отсечение по верхнему краю экрана. Код примера можно загрузить /src/03.003-draw_field_brezenhame/Draw_Field_Brezenhame_RotX.