ПРИМЕРЫ ПРОГРАММ

Здесь приводится несколько примеров программ OpenGL, которые служат иллюстрацией применения результирующих примитивов. В каждой программе используется одна или несколько функций из тех, которые перечислены в табл. 3.1. Окно изображения для выхода в каждой программе задается с помощью стандартных процедур GLUT, описанных в главе 2.

Первая программа служит иллюстрацией использования ломаной линии, набора полимаркеров и подписей, состоящих из растровых символов, для построения линейного графика по данным для каждого месяца в течение одного года. Здесь показан пропорциональный шрифт, хотя по точкам на графике легче выравнивается шрифт с постоянной шириной символов. Поскольку растровые положения определяются по левому нижнему углу с помощью функции определения растрового положения, необходимо сместить точку отсчета, чтобы выровнять центр текстовой строки по положению точек на графике. На рис. 3.67 показан выход программы построения линейного графика.

finclude <GL/glut.h>

GLsizei winWidth = 600, winHeight = 500;

/* Исходный размер окна изображения. */

GLint xRaster = 25, yRaster = 150;

/* Инициализация растрового положения. */

GLubyte label [36] = 'J','a','n', 'F','e','b', 'M','a', 'r',

'A','p','r', 'M','a','y', 'J','u', 'n', 'J'/u','l', 'A'/u','g', ' S',' e', 'p', '0,,,c','t', 'N','o','v', 'D',' e', 'c'; GLint dataValue [12] = 420, 342, 324, 310, 262, 185,

190, 196, 217, 240, 312, 438;

void init (void) {

glClearColor (1.0, 1.0, 1.0, 1.0); // Белое окно.

glMatrixMode (GL_PROJECTION); gluOrtho2D (0.0, 600.0, 0.0, 500.0);

}

void lineGraph (void) {

GLint month, k;

GLint x = 30; // Инициализация координаты x.

glClear (GL_COLOR_BUFFER_BIT); // Чистое окно изображения. glColor3f (0.0, 0.0, 1.0); // Задание синего цвета линии. glBegin (GL_LINE_STRIP) ;

/* Изображение графика в виде ломаной линии. */ for (к = 0; к < 12; к++)

glVertex2i (х + к*50, dataValue [к]); glEnd ( );

glColor3f (1.0, 0.0, 0.0);

/* Задание красного цвета маркера. */ for (к = 0; к < 12; к++) {

/* Изображение данных полимаркером (звездочками). */ glRasterPos2i (xRaster + k*50, dataValue [k] - 4); glutBitmapCharacter (GLUT_BITMAP_9_BY_15, '*'); } glColor3f (0.0, 0.0, 0.0); // Задается черный цвет текста. xRaster = 20;

/* Изображение подписей на диаграмме. */ for (month = 0; month < 12; month++) { glRasterPos2i (xRaster, yRaster); for (k = 3*month; k < 3*month + 3; k++) glutBitmapCharacter (GLUT_BITMAP_HELVETICA_12, label [k]);

xRaster += 50; } glFlush ( );

}

void winReshapeFcn (GLint newWidth, GLint newHeight) { glMatrixMode (GL_PROJECTION); glLoadldentity ( );

gluOrtho2D (0.0, GLdouble (newWidth),

0.0, GLdouble (newHeight));

glClear (GL_COLOR_BUFFER_BIT);

}

void main (int arge, char** argv) { glutlnit (Sarge, argv);

glutlnitDisplayMode (GLUT_SINGLE | GLUT_RGB); glutlnitWindowPosition (100, 100); glutlnitWindowSize (winWidth, winHeight); glutCreateWindow ("Линейный график данных");

init ( ) ;

glutDisplayFunc (lineGraph); glutReshapeFunc (winReshapeFcn); glutMainLoop ( );


⇐ вернуться назад | | далее ⇒