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

Новое на сайте

Механизм приоритетов

Говорилось о: , ,

Для трехмерной текстуры допустимо также пирамидальное фильтрование (mipmapping), однако для этого потребуется явно задать все необходимые промежуточные уровни аналогично тому, как это происходит для одно- и двумерных текстур. Обратите внимание на то, что если в одном и том же текстурном блоке одновременно разрешены текстуры разных типов, то работает механизм приоритетов: наиболее приоритетной текстурой является кубическая текстурная карта, затем в порядке убывания приоритета идут трехмерная, двумерная и одномерная текстуры.
He забывайте, что (в отличие от одномерных и двумерных) занимают гораздо больше памяти (так трехмерная RGBA-текстура размером 256×256x256 занимает 64 Мбайт видеопамяти), поэтому их использование может отрицательно сказаться на быстродействии программы. Далеко не все форматы изображений поддерживают хранение трехмерных текстур. Наиболее подходящими для работы с ними являются DDS-файлы.

Функция giTeximage3DEXT

Говорилось о: , ,

Непосредственное задание трехмерной текстуры осуществляется при помощи функции пример вызова которой выглядит следующим образом: void glTexImage3DEXT ( GLenum GLint level, GLenum internalformat,GLsizei GLsizei GLsizei depth,GLint border, GLenum format, GLenum type,const GLvoid * pixels ); Здесь в качестве параметра выступает константа параметры и depth задают размер задаваемой текстуры в текселях по каждому измерению. Параметры level, internalformat, border, format и type полностью аналогичны соответствующим параметрам функций glTexImagelD И glTexImage2D. Для правильного задания трехмерной текстуры при помощи функции текселы, расположенные в буфере по адресу pixels, должны быть организованы как набор из depth прямоугольных текстур размером на текселов. При помощи параметров GL_UNPACK_ROW_LENGTH и GL_UNPACK_ALIGNMENT можно задать расположение текселов для каждой из этих прямоугольных текстур.

Расширение EXT_texture3D

Говорилось о: , ,

Изначально поддержка трехмерных текстур в OpenGL была реализована при помощи расширения потом, начиная с версии 1.2, она вошла в стандарт OpenGL. Расширение позволяет приложению создавать и использовать в OpenGL которые представляются трехмерными матрицами текселов размером widthxheightxdepth. Расширение вводит новую функцию позволяющую задавать а также ряд констант, необходимых для работы с ними.
Самой важной из вводимых констант является выступающая в качестве типа текстуры в обращении к функциям giEnabie, glDisable, gllsEnabled, glGetTexImage и glGetTexParameter. Также вводится константа GL_MAX_3D_TEXTURE_SIZE_EXT, позволяющая получить максимальный размер трехмерной текстуры. Для этого служит следующий фрагмент кода: int maxSize; glGetlntegerv ( GL_MAX_3D_TEXTURE_SIZE_EXT, SmaxSize ); Поскольку при обращении к трехмерной текстуре необходимы все три текстурные координаты (s, t, г), то вводится константа GL_TEXTURE_WRAP_R_EXT, позволяющая задать закон приведения координаты г в отрезок [0, 1].

Трехмерные (3D) текстуры

Говорилось о: , ,

Текстура представляет собой удобный способ задания функции нескольких переменных. одной переменной легко задается при помощи одномерной (ID) текстуры, двух — двумерной, направления в трехмерном пространстве — при помощи кубической текстурной карты. При этом сложность задаваемой функции не играет практически никакой роли. После того как была задана при помощи текстуры, работа с ней происходит одинаково легко вне зависимости от сложности исходной функции. Механизм линейного фильтрования OpenGL фактически является способом полилинейного (в зависимости от типа текстуры) интерполирования значений текселов на все точки единичного отрезка (квадрата, сферы). Данное обстоятельство активно используется при написании сложных шейдеров ( — процедур закрашивания граней. За счет этого удается в ряде случаев обеспечить довольно сложные законы рендеринга, реализация которых путем прямого вычисления соответствующих функций либо вообще невозможна, либо слишком громоздка с вычислительной точки зрения. Однако в ряде случаев (с некоторыми из них мы столкнемся позже) возникает необходимость определения функции трех независимых переменных. Это естественным образом приводит к понятию трехмерной (3D) текстуры.

Реализация проектора при помощи кубической карты

Говорилось о: , ,

Рассмотрим, каким образом можно реализовать ( при помощи кубической карты. Для проектора зависит от направления на т. е. является функцией направления и поэтому может быть представлена при помощи кубической текстурной карты. Пусть расположен в точке light. Тогда для произвольной вершины Vj в качестве текстурных координат для кубической карты, задающей распределение освещенности, возьмем значения согласно формуле(s, t, г) = Vi – light.
Затем каждой точке произвольной грани сопоставим текстурные координаты на карте освещенности, т. е. зададим падающий на нее свет. Исходя из этого, мы можем реализовать освещение таким проектором следующим образом: 1.В нулевом текстурном блоке мы разместим обычную двумерную текстуру объекта и зададим закон наложения GL_REPLACE. 2.В первом текстурном блоке мы разместим: кубическую карту, задающую распределение освещенности. В качестве закона наложения выберем GLJMODULATE, текстурные координаты будем задавать по формуле.Если мы при этом хотим задавать не только положение источника света в пространстве, но и его ориентацию, то это легко можно сделать при помощи матрицы преобразования текстурных координат. Ориентация объекта в пространстве может быть задана при помощи ортогональной матрицы (или трех углов Эйлера, или кватерниона). Тогда, если задать в качестве матрицы преобразования текстурных координат транспонированную матрицу ориентации (для ортогональных матриц транспонированная совпадает с обратной), то этого будет достаточно для моделирования ориентации источника света.

Применения кубической текстуры

Говорилось о: , ,

Кубическая текстура позволяет в простой и удобной форме задавать функции от направления. Каждому направлению естественным образом соответствует точка на кубе, поэтому достаточно просто задать значения функции в виде текстур на гранях данного куба. Еще одним возможным применением кубической текстуры (мы с ним столкнемся позже, когда будем рассматривать попиксельное освещение) является нормализация векторов. Единичному трехмерному вектору можно легко сопоставить значение компонент RGB. Но при интерполяции и других простых операциях с подобными значениями (векторами) у нас могут получиться ненормированные результаты (непригодные для уравнения освещенности). Кубическая текстура предоставляет простой способ нормализации. Другим примером является задание источника света в виде проектора, когда сила света (и его цвет), падающего в точку, зависит от направления из этой точки на Кубическая текстура в этом случае позволяет в легкой и удобной форме задать подобный

Страница 1 из 22123456789101112131415»...Последняя »