Визуализация в научных исследованиях. Ечкина Е.Ю - 46 стр.

UptoLike

Рубрика: 

Е. Ю. Ечкина, С. Б. Базаров, И. Н. Иновенков «Визуализация в научных исследованиях»
Кафедра АНИ факультета ВМК МГУ имени М. В. Ломоносова http://ani.cs.msu.su
46
Параметр mode определяет, как будут отображаться многоугольники, а параметр face
устанавливает тип многоугольников, к которым будет применяться эта команда и
может принимать следующие значения:
GL_FRONT для лицевых граней
GL_BACK для обратных граней
GL_FRONT_AND_BACK для всех граней
Параметр mode может быть равен:
GL_POINT при таком режиме будут отображаться только вершины
многоугольников.
GL_LINE при таком режиме многоугольник будет представляться набором
отрезков.
GL_FILL при таком режиме многоугольники будут закрашиваться текущим
цветом с учетом освещения и этот режим установлен по умолчанию.
Кроме того, можно указывать, какой тип граней отображать на экране. Для этого
сначала надо установить соответствующий режим вызовом команды
glEnable(GL_CULL_FACE), а затем выбрать тип отображаемых граней с помощью
команды void glСullFace(GLenum mode)
Вызов с параметром GL_FRONT приводит к удалению из изображения всех лицевых
граней, а с параметром GL_BACK- обратных (установка по умолчанию).
Важно отметить, что для корректного построения перечисленных примитивов
необходимо удалять невидимые линии и поверхности, для чего надо включить
соответствующий режим вызовом команды glEnable(GL_DEPTH_TEST).
Массивы вершин
Если вершин много, то чтобы не вызывать для каждой команду glVertex..(), удобно
объединять вершины в массивы, используя команду
void glVertexPointer( GLint size, GLenum type, GLsizei stride, void *ptr )
которая определяет способ хранения и координаты вершин. При этом size определяет
число координат вершины (может быть равен 2, 3, 4), type определяет тип данных
(может быть равен GL_SHORT, GL_INT, GL_FLOAT, GL_DOUBLE). Иногда удобно
хранить в одном массиве другие атрибуты вершины, и тогда параметр stride задает
смещение от координат одной вершины до координат следующей; если stride равен
нулю, это значит, что координаты расположены последовательно. В параметре ptr
указывается адрес, где находятся данные.
Аналогично можно определить массив нормалей, цветов и некоторых других
атрибутов вершины, используя команды
void NormalPointer(GLenum type, GLsizei stride, void*pointer)
void ColorPointer(GLintsize, GLenum type, GLsizei stride, void *pointer)
Для того, чтобы эти массивы можно было использовать в дальнейшем, надо вызвать
команду
void glEnableClientState(GLenum array)
с параметрами GL_VERTEX_ARRAY, GL_NORMAL_ARRAY, GL_COLOR_ARRAY
соответственно. После окончания работы с массивом желательно вызвать команду
void glDisableClientState(GLenum array)
Е. Ю. Ечкина, С. Б. Базаров, И. Н. Иновенков «Визуализация в научных исследованиях»


Параметр mode определяет, как будут отображаться многоугольники, а параметр face
устанавливает тип многоугольников, к которым будет применяться эта команда и
может принимать следующие значения:
       GL_FRONT для лицевых граней
       GL_BACK для обратных граней
       GL_FRONT_AND_BACK для всех граней
Параметр mode может быть равен:
       GL_POINT при таком              режиме     будут    отображаться       только   вершины
        многоугольников.
       GL_LINE при таком режиме многоугольник будет представляться набором
        отрезков.
       GL_FILL при таком режиме многоугольники будут закрашиваться текущим
        цветом с учетом освещения и этот режим установлен по умолчанию.
Кроме того, можно указывать, какой тип граней отображать на экране. Для этого
сначала   надо     установить  соответствующий   режим    вызовом    команды
glEnable(GL_CULL_FACE), а затем выбрать тип отображаемых граней с помощью
команды void glСullFace(GLenum mode)
Вызов с параметром GL_FRONT приводит к удалению из изображения всех лицевых
граней, а с параметром GL_BACK- обратных (установка по умолчанию).
Важно отметить, что для корректного построения перечисленных примитивов
необходимо удалять невидимые линии и поверхности, для чего надо включить
соответствующий режим вызовом команды glEnable(GL_DEPTH_TEST).
Массивы вершин
Если вершин много, то чтобы не вызывать для каждой команду glVertex..(), удобно
объединять вершины в массивы, используя команду
void glVertexPointer( GLint size, GLenum type, GLsizei stride, void *ptr )
которая определяет способ хранения и координаты вершин. При этом size определяет
число координат вершины (может быть равен 2, 3, 4), type определяет тип данных
(может быть равен GL_SHORT, GL_INT, GL_FLOAT, GL_DOUBLE). Иногда удобно
хранить в одном массиве другие атрибуты вершины, и тогда параметр stride задает
смещение от координат одной вершины до координат следующей; если stride равен
нулю, это значит, что координаты расположены последовательно. В параметре ptr
указывается адрес, где находятся данные.
Аналогично можно определить массив нормалей, цветов и некоторых других
атрибутов вершины, используя команды
       void NormalPointer(GLenum type, GLsizei stride, void*pointer)
       void ColorPointer(GLintsize, GLenum type, GLsizei stride, void *pointer)
Для того, чтобы эти массивы можно было использовать в дальнейшем, надо вызвать
команду
void glEnableClientState(GLenum array)
с параметрами GL_VERTEX_ARRAY, GL_NORMAL_ARRAY, GL_COLOR_ARRAY
соответственно. После окончания работы с массивом желательно вызвать команду
void glDisableClientState(GLenum array)
Кафедра АНИ факультета ВМК МГУ имени М. В. Ломоносова http://ani.cs.msu.su                   46