Главная страница
Навигация по странице:

  • GL_NEVER НИКОГДА GL_LESS Если поступающее z -значение меньше, чем хранящееся в буфере глубины 59

  • GL_EQUAL Если поступающее z -значение равно хра- нящемуся в буфере глубины GL_LEQUAL

  • GL_GREATE R Если поступающее z -значение больше, чем хранящееся в буфере глубины GL_NOTEQU EL

  • GL_GEQUAL Если поступающее z -значение больше или равно, чем хранящееся в буфере глубины GL_ALWAYS

  • GL_RED , GL_GREEN , GL_BLUE ,GL_ALPHA , GL_RGB , GL_RGBA , GL_COLOR_INDEX , GL_STENCIL_INDEX , GL_LUMINANCE ,GL_DEPTH_COMPONENT

  • GL_UNSIGNED_BYTE , GL_BYTE , GL_BITMAP ,GL_UNSIGNED_SHORT , GL_SHORT , GL_FLOAT , GL_INT и GL_UNSIGNED_INT

  • glPushAttrib

  • GL_ACCUM_BUFFER _BIT ДЛЯ БУФЕРА НАКОПЛЕНИЯ (АККУМУЛЯТОРА). АККУ- МУЛЯТОР ОЧИЩАЕТСЯ GL_ALL_ATTRIB_BI TS

  • GL_DEPTH_BUFFER _BIT

  • GL_LIGHTING_BIT Атрибуты освещения GL_LINE_BIT Атрибуты линии GL_LIST_BIT Стартовое смещение имен списков GL_PIXEL_MODE_BI T

  • GL_SCISSOR_BIT Атрибуты отсечения. Флаг GL_SCISSOR_TEST и поле отсе- 61 mask Сохраняемые атрибуты чения GL_STENCIL_BUFFER _BIT

  • GL_TEXTURE_BIT Атрибуты текстуры GL_TRANSFORM_BI T Атрибуты преобразований GL_VIEWPORT_BIT

  • GL_FOG_HINT ТОЧНОСТЬ ВЫ- ЧИСЛЕНИЯ ТУМАНА GL_POINT_SMOOTH_HINT

  • GL_PERSPECTIVE_CORRECTION _HINT

  • СПИСОК ЛИТЕРАТУРЫ 1 ТИХОМИРОВ, Ю. ПРОГРАММИРОВАНИЕ ТРЕХМЕРНОЙ ГРАФИКИ // Ю. ТИХОМИ- РОВ. СПБ.: BHV, 1998.

  • ПОРЕВ, В.Н. КОМПЬЮТЕРНАЯ ГРАФИКА // В.Н. ПОРЕВ. СПБ.: BHV, 2002.

  • 3 С. А. Васильев opengl компьютерная графика


    Скачать 491.09 Kb.
    Название3 С. А. Васильев opengl компьютерная графика
    Дата10.04.2018
    Размер491.09 Kb.
    Формат файлаpdf
    Имя файлаvasilev.pdf
    ТипУчебное пособие
    #40791
    страница9 из 9
    1   2   3   4   5   6   7   8   9
    GL_DEPTH_TEST. Функция сравнения, используемая в тесте глуби- ны, задается командой void glDepthFunc (GLenum func)
    Данная команда определяет функцию сравнения для поступающего z-значения с тем, которое было в буфере глубины. Функция сравнения задается параметром func, которое может принимать следующие символьные значения:
    Константа
    Тест завершается положительно…
    GL_NEVER
    НИКОГДА
    GL_LESS
    Если поступающее z-значение меньше, чем хранящееся в буфере глубины

    59
    Константа
    Тест завершается положительно…
    GL_EQUAL
    Если поступающее z-значение равно хра- нящемуся в буфере глубины
    GL_LEQUAL
    Если поступающее z-значение меньше или равно, чем хранящееся в буфере глубины
    GL_GREATE
    R
    Если поступающее z-значение больше, чем хранящееся в буфере глубины
    GL_NOTEQU
    EL
    Если поступающее z-значение не равно хранящемуся в буфере глубины
    GL_GEQUAL
    Если поступающее z-значение больше или равно, чем хранящееся в буфере глубины
    GL_ALWAYS Всегда
    По умолчанию функция сравнения задана как GL_ LESS.
    14.5 Буфер изображения
    Для копирования цветного изображения из буфера изображения в обычную оперативную память используется команда: void glReadPixels (GLint x, GLint y,
    GLsizei width, GLsizei height,
    GLenum format, GLenum type, GLvoid *pixels)
    Параметры x и y задают левый нижний угол копируемого изображения, ширина которого width и высота height. Параметром format можно указать, что именно от пиксель необходимо копировать. Для этого предусмотрены следующие символьные константы: GL_RED, GL_GREEN, GL_BLUE,
    GL_ALPHA, GL_RGB, GL_RGBA, GL_COLOR_INDEX, GL_STENCIL_INDEX, GL_LUMINANCE,
    GL_DEPTH_COMPONENT и т.д. (см. MSDN). Параметр type задает тип записываемых значений и может принимать следующие значения: GL_UNSIGNED_BYTE, GL_BYTE, GL_BITMAP,
    GL_UNSIGNED_SHORT, GL_SHORT, GL_FLOAT, GL_INT и GL_UNSIGNED_INT. Место для раз- мещения изображения в оперативной памяти указывается параметром pixels.
    Для записи изображения из оперативной памяти в буфер изображения используется команда void glDrawPixels (GLsizei width, GLsizei height,
    GLenum format, GLenum type,GLvoid *pixels)
    После отработки данной команды изображение должно появиться начиная с текущей позиции рас- тра. Позицию можно задать, например, командой glRasterPos().
    Для копирования цветного изображения из одного участка буфера в другой участок, минуя опера- тивную память, используется команда void glCopyPixels (GLint x, GLint y,
    GLsizei width, GLsizei height, GLenum format)
    Параметры x и y задают левый нижний угол копируемого изображения, ширина которого width и высота height. Параметром format можно указать, что именно от пиксель необходимо копировать (см. команду glReadPixels()). Позицию для размещения фрагмента изображения можно задать, например, командой glRasterPos().
    15 ГРУППЫ АТРИБУТОВ
    Работая с OpenGL разработчик вынужден постоянно изменять некоторые параметры примитивов графической библиотеки. Для того чтобы изменение параметров не влияло на состояние других прими- тивов существуют команды для сохранения и восстановления текущих параметров примитивов. void glPushAttrib (GLbitfieldmask) void glPopAttrib ()
    Первая команда сохраняет в стеке все атрибуты, указанные битами в параметре mask. glPopAttrib() восстанавливает значения тех переменных состояния, которые были сохранены командой
    glPushAttrib(). Возможные значения параметра mask:

    60
    mask
    Сохраняемые атрибуты
    GL_ACCUM_BUFFER
    _BIT
    ДЛЯ БУФЕРА НАКОПЛЕНИЯ
    (АККУМУЛЯТОРА). АККУ-
    МУЛЯТОР ОЧИЩАЕТСЯ
    GL_ALL_ATTRIB_BI
    TS
    Все доступные (!)
    GL_COLOR_BUFFER
    _BIT
    GL_ALPHA_TEST,
    GL_DRAW_BUFFER, GL_BLEND,
    GL_DITHER, GL_LOGIC_OP
    GL_CURRENT_BIT
    Текущие значения. Текущий
    RGBA цвет, текущий индекс цве- та, вектора нормали, текущие ко- ординаты текстуры, теку- щая позиция растра, флаг доступ- но- сти текущей позиции растра –
    GL_CURRENT_RASTER_POSITION
    _VALID
    Продолжение табл.
    mask
    Сохраняемые атрибуты
    GL_DEPTH_BUFFER
    _BIT
    Биты тестирования буфера глу- бины – GL_DEPTH_TEST, маска записи глуби- ны – GL_DEPTH_WRITEMASK, тестируемая функция глубины.
    Буфер глубины очищается.
    GL_ENABLE_BIT
    Все включенные атрибуты
    GL_EVAL_BIT
    Все вычислители
    GL_FOG_BIT
    Атрибуты тумана
    GL_HINT_BIT
    Параметры контролируемых задач
    (см.glHint)
    GL_LIGHTING_BIT
    Атрибуты освещения
    GL_LINE_BIT
    Атрибуты линии
    GL_LIST_BIT
    Стартовое смещение имен списков
    GL_PIXEL_MODE_BI
    T
    Атрибуты пиксель
    GL_POINT_BIT
    Атрибуты точки. Флаг
    GL_POINT_SMOOTH и размер точки
    GL_POLYGON_BIT
    Атрибуты полигонов
    GL_POLYGON_STIPPL
    E_BIT
    Атрибуты шаблона полигона
    GL_SCISSOR_BIT
    Атрибуты отсечения. Флаг
    GL_SCISSOR_TEST и поле отсе-

    61
    mask
    Сохраняемые атрибуты чения
    GL_STENCIL_BUFFER
    _BIT
    Атрибуты для буфера трафаретов
    GL_TEXTURE_BIT
    Атрибуты текстуры
    GL_TRANSFORM_BI
    T
    Атрибуты преобразований
    GL_VIEWPORT_BIT
    Атрибуты просмотра
    Более подробная информация параметров команд сохранения атрибутов находится в справочной системе (MSDN).
    Для сохранения нескольких атрибутов необходимо для каждого атрибута выполнить команду со- хранения glPushAttrib() (для восстановления атрибутов не забудьте исполнить столько же раз команду glPopAttrib() в обратном порядке).
    16 УПРАВЛЕНИЕ ЭФФЕКТИВНОСТЬЮ РАБОТЫ
    АЛГОРИТМА РАСТЕРИЗАЦИИ
    Иногда для повышения эффективности работы графического приложения можно упростить работу некоторых алгоритмов растеризации, например, при сглаживании точек и линий, при формировании тумана, при интерполировании координат для цвета и текстур и т.п. Правда, на это можно пойти, если нет нарушения эстетического восприятия итогового изображения. Управлять процессом растеризации можно командой void glHint (Glenum target,Glenum mode)
    Здесь target – вид контролируемой задачи, принимает одно из следующих значений:
    target
    Контролируемые пара- метры
    GL_FOG_HINT
    ТОЧНОСТЬ ВЫ-
    ЧИСЛЕНИЯ
    ТУМАНА
    GL_POINT_SMOOTH_HINT
    Качество сглаживания
    (антиалиасинг) при растеризации точки
    GL_LINE_SMOOTH_HINT
    Качество сглаживания
    (антиалиасинг) при растеризации линии
    GL_POLYGON_SMOOTH_HINT
    Качество сглаживания
    (антиалиасинг) при расте-ризации сторон полигона
    GL_PERSPECTIVE_CORRECTION
    _HINT
    Процесс интерполяции значений координат точек при вычислении цвета и текстурирова- нии
    Возможные значения параметра mode в виде символьных констант:
    mode
    Значения

    62
    mode
    Значения
    GL_FASTEST
    БЫСТРЫЙ АЛГОРИТМ
    GL_NICETESR
    Алгоритм с высоким качеством ре- зультата
    GL_DONT_CARE
    Базовый алгоритм
    OpenGL может отклонить ваши рекомендации, записанные в команде glHint(), из-за невозможности выполнения данного режима, так как конкретные реализации OpenGL могут по разному выполнять свои команды.
    ЗАКЛЮЧЕНИЕ
    В узких рамках данного пособия трудно раскрыть все возможности OpenGL. Но мне кажется, что тот материал, который представлен, послужит хорошей базой для самостоятельного изучения и иссле- дования возможностей библиотеки.
    В пособие не вошли вопросы реалистической графики, связанные с построением теней и зеркально- го отражения. Дело в том, что OpenGL не располагает специальными средствами для получения подоб- ных эффектов. Обычно используют индивидуальные способы построения теней и зеркального отраже- ния. В частности, интересные алгоритмы построения теней различной сложности и на различные по- верхности можно взять, например, с сайтов http://ixbt.com и http://www.gamedev.ru.
    За очевидной мощью графической библиотеки скрываются множество "подводных камней", свя- занных с неэффективным использованием некоторых ее команд. Рассмотрим некоторые из них.
    • Не увлекайтесь матричными операциями. Если, например, требуется для каждого кадра анима- ции осуществлять поворот glRotate* и перемещение glTranslate*, то гораздо эффективней две эти мат- рицы свести в одну и выполнять единственную эту матрицу используя команду glLoadMatrixа*.
    Старайтесь работать списками изображений, так как при очередном вызове дисплейного списка координаты вершин и их атрибуты уже находятся в памяти видеокарты, что положительно сказывается на производительности обработки изображения.
    • Используйте векторную форму задания параметров команд OpenGL, что эффективней по сравне- нию скалярного задания соответствующих величин.
    СПИСОК ЛИТЕРАТУРЫ
    1
    ТИХОМИРОВ, Ю. ПРОГРАММИРОВАНИЕ ТРЕХМЕРНОЙ ГРАФИКИ // Ю. ТИХОМИ-
    РОВ. СПБ.: BHV, 1998.
    2
    Баяковский, Ю.М. Графическая библиотека OpenGL:
    учебно-мето-дическое пособие // Ю.М. Бая- ковский, А.В. Игнатенко, А.И. Фролов. М.: ВМиК МГУ, 2003.
    3
    ПОРЕВ, В.Н. КОМПЬЮТЕРНАЯ ГРАФИКА // В.Н. ПОРЕВ. СПБ.: BHV, 2002.
    4
    Шикин, Е.В. Компьютерная графика. Полигональные модели // Е.В. Шикин, А.В. Боресков. М.:
    Диалог МИФИ, 2000.
    ПРЕДМЕТНЫЙ УКАЗАТЕЛЬ
    Команды GL glAccum, 70 glAlphaFunc, 63 glArrayElement, 26 glBegin, 9 glBitmap, 18 glBlendFunc, 64 glCallList, 28 glClear, 7 glClearAccum, 71 glClearColor, 7 glClipPlane, 21 glColor, 8 glColorMaterial, 56 glColorPointer, 25 glCullFace, 16 glDeleteList, 30 glDepthFunc, 71 glDepthRange, 40 glDisableClientState, 26

    4
    glDrawArrays, 26 glDrawBuffer, 70 glDrawPixels, 72 glEnableClientState, 25 glEnd, 9 glEndList, 27 glFinish, 6 glFog, 62 glFrontFace, 16 glFrustum, 41 glGenList, 30 glGetDoublev, 44 glGetIntegerv, 44 glHint, 75 glLight, 56 glLightModel, 60 glLinesStipple, 15 glLineWidth, 15 glListBase, 30 glLoadIdenty, 36 glLoadMatrix, 35 glLogicOp, 22 glMaterial, 54 glMatrixMode, 35 glMultMatrix, 36 glNewList, 27 glNormal3, 14 glNormalPointer, 25 glOrtho, 40 glPixelStore, 19 glPointSize, 14 glPoligonStipple, 17 glPolygonMode, 13 glPopAttrib, 73 glPopMatrix, 36 glPushAttrib, 73 glPushMatrix, 36 glRasterPos, 18 glReadBuffer, 70 glReadPixels, 72, 73 glRect, 13 glRotate, 36 glScale, 36 glScissor, 21, 22 glStencilFunc, 67 glStencilOp, 68 glTexCoord, 53 glTexCoordPointer, 25 glTexEnv, 52 glTexGen, 53 glTexImage2D, 47 glTextParametr, 49 glTranslate, 36 glVertex, 7 glVertexPointer, 25 glViewPort, 39 wglUseFontBitmaps, 31
    Команды GLU gluBuild2DMipmaps, 49 gluCylinder, 24 gluDeleteQuadric, 23 gluDisk, 24 gluLookAt, 39 gluNewQuadric, 23 gluOrtho2D, 41 gluPartialDisk, 24 gluPerspective, 42 gluScaleImage, 46 gluSphere, 24 gluUnProject, 43 gluUnProject4, 43
    Константы GL
    GL_BYTE, 46
    GL_FLOAT, 46
    GL_INT, 46
    GL_UNSIGNED_BYTE, 46
    GL_UNSIGNED_INT, 46
    GL_UNSIGNED_SHORT, 46
    GL_ACCUM, 71
    GL_ACCUM_BUFFER_BIT, 7, 73
    GL_ADD, 71
    GL_ALL_ATTRIB_BITS, 73
    GL_ALPHA, 46
    GL_ALWAYS, 64, 67, 72
    GL_AMBIENT, 55, 58
    GL_AMBIENT_AND_DIFFUSE, 55
    GL_AND, 23
    GL_AND_INVERTED, 23
    GL_AND_REVERSE, 23
    GL_BACK, 13, 16
    GL_BITMAP, 46
    GL_BLUE, 46
    GL_CCW, 16
    GL_CLAMP, 50
    GL_CLEAR, 23
    GL_CLIP_PLANEi, 21
    GL_COLOR_ARRAY, 19, 25
    GL_COLOR_BUFFER_BIT, 7, 73
    GL_COLOR_INDEX, 46
    GL_COMPILE, 28
    GL_COMPILE_AND_EXECUTE, 28
    GL_CONSTANT_ATTENUATION,
    57, 58
    GL_COPY, 23
    GL_COPY_INVERTED, 23
    GL_CULL_FACE, 16
    GL_CURRENT_BIT, 73
    GL_CW, 16
    GL_DECR, 68
    GL_DEPTH_BUFFER_BIT, 7, 74

    5
    GL_DEPTH_TEST, 71
    GL_DIFFUSE, 55, 58
    GL_DONT_CARE, 75
    GL_DST_ALPHA, 65
    GL_DST_COLOR, 65
    GL_EMISSION, 55
    GL_ENABLE_BIT, 74
    GL_EQUAL, 64, 67, 72
    GL_EQUIV, 23
    GL_EVAL_BIT, 74
    GL_EXP, 62
    GL_EXP2, 62
    GL_EYE_LINEAR, 54
    GL_FASTEST, 75
    GL_FILL, 14
    GL_FOG_BIT, 74
    GL_FOG_COLOR, 63
    GL_FOG_DENSITY, 62
    GL_FOG_END, 62, 63
    GL_FOG_HINT, 75
    GL_FOG_MODE, 62
    GL_FOG_START, 62
    GL_FRONT, 13, 16
    GL_FRONT_ BACK, 16
    GL_FRONT_AND_BACK, 13
    GL_GEQUAL, 64, 67, 72
    GL_GREATER, 64, 67, 72
    GL_GREEN, 46
    GL_HINT_BIT, 74
    GL_INCR, 68
    GL_INVERT, 23, 68
    GL_KEEP, 68
    GL_LEQUAL, 64, 67, 72
    GL_LESS, 64, 67, 72
    GL_LIGHT_MODEL_LOCAL_VIEWER, 61
    GL_LIGHT_MODEL_TWO_SIDE, 61
    GL_LIGHTING_BIT, 74
    GL_LINE, 14
    GL_LINE_BIT, 74
    GL_LINE_LOOP, 10
    GL_LINE_SMOOTH, 15
    GL_LINE_SMOOTH_HINT, 75
    GL_LINE_STIPPLE, 15
    GL_LINE_STRIP, 10
    GL_LINEAR, 50, 51, 62
    GL_LINEAR_ATTENUATION, 57, 58
    GL_LINEAR_MIPMAP_LINEAR, 51
    GL_LINEAR_MIPMAP_NEAREST, 51
    GL_LINES, 10
    GL_LIST_BIT, 74
    GL_LOAD, 71
    GL_MODELVIEW, 35
    GL_MODELVIEW_MATRIX, 44
    GL_MODULATE, 52
    GL_MULT, 71
    GL_NAND, 23
    GL_NEAREST, 50, 51
    GL_NEAREST_MIPMAP_LINEAR, 51
    GL_NEAREST_MIPMAP_NEAREST, 51
    GL_NEVER, 64, 67, 72
    GL_NICETESR, 75
    GL_NOOP, 23
    GL_NOR, 23
    GL_NORMAL_ARRAY, 19, 25
    GL_NORMALIZE, 14
    GL_NOTEQUAL, 64, 67, 72
    GL_OBJECT_LINEAR, 54
    GL_ONE, 64
    GL_ONE_MINUS_DST_ALPHA, 65
    GL_ONE_MINUS_DST_COLOR, 65
    GL_ONE_MINUS_SRC_ALPH, 65
    GL_ONE_MINUS_SRC_COLOR, 65
    GL_OR, 23
    GL_OR_INVERTED, 23
    GL_OR_REVERSE, 23
    GL_PERSPECTIVE_CORRECTION_HINT, 75
    GL_PIXEL_MODE_BIT, 74
    GL_POINT, 14
    GL_POINT_BIT, 74
    GL_POINT_SMOOTH, 14
    GL_POINT_SMOOTH_HINT, 75
    GL_POINTS, 9
    GL_POLYGON, 12
    GL_POLYGON_BIT, 74
    GL_POLYGON_SMOOTH_HINT, 75
    GL_POLYGON_STIPPLE_BIT, 74
    GL_POSITION, 59
    GL_PROJECTION, 35
    GL_PROJECTION_MATRIX, 44
    GL_QUAD_STRIP, 12
    GL_QUADRATIC_ATTENUATION, 57
    GL_QUADS, 12
    GL_RED, 46
    GL_REPEAT, 50
    GL_REPLACE, 52, 68
    GL_RETURN, 71
    GL_RGB, 46
    GL_RGBA, 46
    GL_SCISSOR_BIT, 74
    GL_SCISSOR_TEST, 21
    GL_SET, 23
    GL_SHININESS, 55
    GL_SHORT, 46
    GL_SMOOTH, 9
    GL_SPECULAR, 55, 58
    GL_SPHERE_MAP, 54
    GL_SPOT_CUTOFF, 57
    GL_SPOT_DIRECTION, 59
    GL_SPOT_EXPONENT, 57
    GL_SRC_ALPHA, 65
    78

    6
    GL_SRC_ALPHA_SATURATE, 65
    GL_SRC_COLOR, 64
    GL_STENCIL_BUFFER_BIT, 67
    GL_STENCIL_BUFFER_BIT, 7, 74
    GL_STENCIL_TEST, 67
    GL_TEXTURE, 35
    GL_TEXTURE_2D, 47
    GL_TEXTURE_BIT, 74
    GL_TEXTURE_COORD_ARRAY, 19, 25
    GL_TEXTURE_ENV, 52
    GL_TEXTURE_ENV_MODE, 52
    GL_TEXTURE_GEN_MODE, 53
    GL_TEXTURE_MAG_FILTER, 50
    GL_TEXTURE_MIN_FILTER, 50
    GL_TEXTURE_WRAP_S, 50
    GL_TEXTURE_WRAP_T, 50
    GL_TRANSFORM_BIT, 74
    GL_TRIANGLE_FAN, 11
    GL_TRIANGLE_STRIP, 11
    GL_TRIANGLES, 11
    GL_VERTEX_ARRAY, 19, 25
    GL_VIEWPORTM_BIT, 74
    GL_VIEWPORTR, 44
    GL_XOR, 23
    GL_ZERO, 64, 68
    Функции GDI
    CreateFont, 31

    7
    79
    1   2   3   4   5   6   7   8   9


    написать администратору сайта