Визуализация данных научных исследований
граммно, то отказ от их использования в данном случае позволит повысить скорость формирования изображения. Данные, организованные таким образом, получили название множества данных размерностью 2.5 (2.5 dimensional data sets), поскольку, хотя они и представляют точки трехмерного пространства, специфическая организация данных позволяет использовать эффективные алгоритмы их отображения. Но учтите, подобная структура данных не позволяет отображать трехмерные поверхности произвольного вида.
При формировании изображения, представленного на рис. 12.3, использован еще один специфический прием, который вы сможете в дальнейшем применять и в собственной практике. Одновременное вычерчивание многоугольника и контура ячейки выполняется следующим фрагментом программы:
glColor3f(1.0, 1.0, 1.0); glBegin(GL_QUADS)
glVertex3i(i, z[i][j],j);
glVertex3i(i+l, z[i+l][j],j);
glVertex3i(i+1, z[i+1][j+1],j+1);
glVertex3i(i, z[i][j+1],j+1); glEnd();
glColor3f(0.0, 0.0, 0.0); glBegin(GL_LINE_L00P)
glVertex3i(i, z[i][j],j);
glvertex3i(i+l, z[i+1][j],j);
glVertex3i(i+l, z[i+l][j+1],j+1);
glvertex3i(i, z[i][j+1],j+1); glEnd();
Следовательно, и контур ячейки, и многоугольник лежат в одной и той же плоскости. Хотя контур ячейки вычерчивается и после отображения многоугольника, неточность вычислений может привести к тому, что часть линий контура окажется перекрытой заливкой соседнего многоугольника, частично использующего те же вершины. В OpenGL отсутствует режим совмещенного отображения контура многоугольника и его внутренней области разными цветами. Но тот же эффект можно получить, воспользовавшись режимом смещения многоугольника {polygon offset mode). Для этого следует предварительно установить параметры смещения:
glEnable(GL_POLYGON_OFFSET_FILL); glPolygonOffset(1.0, 0.5);
Первый параметр функции glPolygonOf f set( ) задает смещение, а второй - зависимое от реализации значение масштабного коэффициента. В результате изображение контура многоугольника будет несколько придвинуто к наблюдателю по сравнению с изображением внутренней области многоугольника, а потому обязательно будет видимо.