Загрузить архив с примерами ЗДЕСЬ.
Ранее в примере для рисования сетки из линий мы использовали функции 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.