3 С. А. Васильев opengl компьютерная графика
Скачать 491.09 Kb.
|
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 |