Opengl, рисование линий

04.02.2012
На самом деле рисовать линии в OpenGL так же легко, как и рисовать на самой форме приложения с помощью Canvas. И сейчас рассмотрим всё более детально.

Несвязанные линии


Давайте посмотри простой пример, нам надо нарисовать линию с точки 0,0 до точки 1,1. Т.е по диагонали.
Делается это так:
glBegin(GL_LINES); //Будем рисовать линию

glVertex3f(0.0,0.0,0.0); //Начальная точка
glVertex3f(1.0,1.0,0.0); //Конечная точка
glEnd;


Вроде всё просто, в первой строчке мы говорим OpenGL, что будем рисовать линию. А в следующих двух, мы эту линию рисуем, указывая начальную и конечные точки. Стоит отметить что здесь, в отличии от Canvas, мы рисуем в 3D пространстве, поэтому у команды glVertex3f три параметра (x, y и z). Третий нам сайчас вообще не нужен, поэтому оставим его равным нулю.

Связанные линии


Здесь практически всё тоже самое, за исключением того, что рисование происходит на манеру Canvas.LineTo. Т.е. мы рисуем ломаную линию.
glBegin(GL_LINE_STRIP); //Будем рисовать ломаную линию

glVertex3f(0.0,0.0,0.0);
glVertex3f(0.0,1.0,0.0);
glVertex3f(1.0,1.0,0.0);
glVertex3f(1.0,0.0,0.0);
glVertex3f(0.0,0.0,0.0);
glEnd;


Практически всё тоже самое, только вначале, команде dlBegin, мы передаём параметр GL_LINE_STRIP вместо, GL_LINES. А дальше идём последовательно по точкам нашей линии, в данном случае это будет квадрат.
Конечно, тоже самое можно написать и в несвязанных линиях:
glBegin(GL_LINES); //Будем рисовать линию

glVertex3f(0.0,0.0,0.0); //Начало линии 1
glVertex3f(0.0,1.0,0.0); //Конец линии 1
glVertex3f(1.0,1.0,0.0); //Начало линии 2
glVertex3f(1.0,0.0,0.0); //Конец линии 2
glVertex3f(0.0,0.0,0.0); //Начало линии 3
glEnd;


Как видно из комментариев, все команды разбиваются попарно (начало - конец), т.е. мы будем иметь три линии, но, т.к. у третьей линии не указана координаты конца, то рисоваться она не будет. И останется у нас всего 2 линии.
//Линия 1

glVertex3f(0.0,0.0,0.0);
glVertex3f(0.0,1.0,0.0);
//Линия 2
glVertex3f(1.0,1.0,0.0);
glVertex3f(1.0,0.0,0.0);