1. Предисловие:
Метод рисования линий в Delphi в основном такой же, как и метод рисования точек. Разница заключается в параметрах glBegin(). Код среды рисования может ссылаться на код инициализации рисования OpenGL2d в Delphi, адрес: //www.VeVB.COm/article/52141.htm. Измененная часть — это содержимое функции Draw.
2. Этапы рисования линий:
GL_LINES: рассматривать каждую вершину как независимый сегмент линии. Между вершинами 2n-1 и 2n определено в общей сложности n сегментов линии, а всего нарисовано N/2 сегментов линии.
GL_LINE_STRIP: Нарисуйте набор сегментов линии, соединенных последовательно от первой вершины до последней вершины. n-я и n+1 вершины определяют сегмент линии n. Всего рисуется n-1 сегментов линии.
GL_LINE_LOOP: Нарисуйте набор отрезков линии, соединенных последовательно от первой вершины до последней вершины, а затем последняя вершина соединяется с первой вершиной. n-я и n+1 вершины определяют сегмент линии n, а всего n линий. сегменты нарисованы.
Для рисования линий можно использовать следующие функции:
glLineWidth() устанавливает ширину линии
glShadeModel() устанавливает режим перехода цвета.
glColor3f() устанавливает цвет линии
процедура TForm1.Draw;начинать
// Очищаем буфер
glClear(GL_COLOR_BUFFER_BIT или GL_DEPTH_BUFFER_BIT);
// ----------- GL_LINES -----------
//Устанавливаем ширину линии
glLineWidth (5);
// Цвет градиента между двумя точками
glShadeModel (GL_SMOOTH);
glBegin(GL_LINES); // рисуем линии
//Устанавливаем цвет стартовой линии
glColor3f (1, 0, 0);
// рисуем начальную точку
glVertex2f(50, 50);
//Устанавливаем цвет линии конечной точки
glColor3f (0, 0, 1);
//Конечная точка рисования
glVertex2f(200, 200);
гЛЭнд;
// Один и тот же цвет между двумя точками
glShadeModel (GL_FLAT);
glBegin (GL_LINES);
glColor3f (0, 1, 0);
glVertex2f(200, 50);
glColor3f (1, 1, 0);
glVertex2f(50, 200);
гЛЭнд;
// ----------- GL_LINE_LOOP -----------
// Три точки замыкают цикл, образуя треугольник glShadeModel(GL_SMOOTH не работает);
glLineWidth (1);
glBegin (GL_LINE_LOOP);
glColor3f (0, 0, 1);
glVertex2f(250, 50);
glVertex2f(250, 200);
glVertex2f(280, 150);
гЛЭнд;
// ----------- GL_LINE_STRIP -----------
// Многоточечная ломаная glShadeModel(GL_SMOOTH);
glLineWidth (1);
glBegin (GL_LINE_STRIP);
glColor3f (1, 0, 255);
glVertex2f(350, 50);
glVertex2f(400, 200);
glVertex2f(480, 150);
glVertex2f(490, 60);
гЛЭнд;
SwapBuffers(FDC); //Заменяем содержимое двойного буфера, который скопирует только что нарисованную графику на экран.
конец;
Вы можете видеть, что цветовой градиент первой X-строки OpenGL имеет этот стиль по умолчанию. OpenGL предоставляет функцию glShadeModel, чтобы решить, как справиться с ситуацией с разными цветами.
glShadeModel(GL_SMOOTH); // Режим Smooth, который также является методом обработки по умолчанию в opengl, обеспечивает эффект цветового градиента glShadeModel(GL_FLAT); // Монохромный режим, цвет сегмента линии основан на цвете определенного; вершина, которая определяется конкретной реализацией. Чтобы избежать неопределенности, попробуйте использовать один и тот же цвет для полигонов.
После тестирования было обнаружено, что эффект градиента недопустим в стилях GL_LINE_LOOP и GL_LINE_STRIP! Конкретные причины требуют дальнейшего выяснения.
Кроме того, OpenGL предоставляет функцию сглаживания, функция
glEnable(GL_LINE_SMOOTH); //Включить glHint(GL_LINE_SMOOTH,GL_NICEST); glDisable(GL_LINE_SMOOTH); //Закрыть;
После его использования я обнаружил, что эффект сглаживания не очевиден. Это еще предстоит изучить дальше.
Нажмите здесь, чтобы загрузить полный код