Подготовка текстуры
Подготовка текстуры
Принятый в OpenGL формат хранения изображений отличается от стандартного формата Windows DIB только тем, что компоненты (R,G,B) для каждой точки хранятся в прямом порядке, а не в обратном и выравнивание задается программистом. Считывание графических данных из файла и их преобразование можно проводить и вручную, однако удобней воспользоваться функцией, входящей в состав библиотеки GLAUX (для ее использования надо дополнительно подключить glaux.lib), которая сама проводит необходимые операции. Это функция
AUX_RGBImageRec* auxDIBImageLoad(string file)
где file - название файла с расширением *.bmp или *.dib. В качестве результата функция возвращает указатель на область памяти, где хранятся преобразованные данные.
При создании образа текстуры в памяти следует учитывать следующие требования.
Во-первых, размеры текстуры как по горизонтали, так и по вертикали должны представлять собой степени двойки. Это требование накладывается для компактного размещения текстуры в памяти и способствует ее эффективному использованию. Использовать только текстуры с такими размерами конечно неудобно, поэтому перед загрузкой их надо преобразовать. Изменение размеров текстуры проводится с помощью команды
void gluScaleImage(GLenum format, GLint widthin, GL heightin, GLenum typein, const void *datain, GLint widthout, GLint heightout, GLenum typeout, void *dataout)
В качестве значения параметра format обычно используется значение GL_RGB или GL_RGBA, определяющее формат хранения информации. Параметры widthin, heightin, widhtout, heightout определяют размеры входного и выходного изображений, а с помощью typein и typeout задается тип элементов массивов, расположенных по адресам datain и dataout. Как и обычно, то может быть тип
GL_UNSIGNED_BYTE, GL_SHORT, GL_INT и так далее. Результат своей работы функция заносит в область памяти, на которую указывает параметр dataout.
Во-вторых, надо предусмотреть случай, когда объект по размерам значительно меньше наносимой на него текстуры. Чем меньше объект, тем меньше должна быть наносимая на него текстура и поэтому вводится понятие уровней детализации текстуры. Каждый уровень детализации задает некоторое изображение, которое является как правило уменьшенной в два раза копией оригинала. Такой подход позволяет улучшить качество нанесения текстуры на объект. Например, для изображения размером 2m?2n можно построить max(m,n)+1 уменьшенных изображений, соответствующих различным уровням детализации.
Эти два этапа создания образа текстуры в памяти можно провести с помощью команды
void gluBuild2DMipmaps(GLenum target, GLint components, GLint width, GLint height, GLenum format, GLenum type, const void *data)
где параметр target должен быть равен GL_TEXTURE_2D, components определяет количество цветовых компонент текстуры, которые будут использоваться при ее наложении и может принимать значения от 1 до 4 (1-только красный,2-красный и alpha, 3-красный, синий, зеленый, 4-все компоненты).
Параметры width, height, data определяют размеры и расположение текстуры соответственно, а format и type имеют аналогичный смысл, что и в команде gluScaleImage().
В OpenGL допускается использование одномерных текстур, то есть размера 1xN, однако это всегда надо указывать, используя в качестве значения target константу GL_TEXTURE_1D. Существует одномерный аналог рассматриваемой команды- gluBuild1DMipmaps(), который отличается от двумерного отсутствием параметра height.
При использовании в сцене нескольких текстур, в OpenGL применяется подход, напоминающий создание списков изображений. Вначале, с помощью команды
void glGenTextures(GLsizei n, GLuint*textures)
надо создать n идентификаторов для используемых текстур, которые будут записаны в массив textures. Перед началом определения свойств очередной текстуры следует вызвать команду
void glBindTexture(GLenum target, GLuint texture)
где target может принимать значения GL_TEXTURE_1D или GL_TEXTURE_2D, а параметр texture должен быть равен идентификатору той текстуры, к которой будут относиться последующие команды. Для того, чтобы в процессе рисования сделать текущей текстуру с некоторым идентификатором, достаточно опять вызвать команду glBindTexture() c соответствующим значением target и texture. Таким образом, команда glBindTexture() включает режим создания текстуры с идентификатором texture, если такая текстура еще не создана, либо режим ее использования, то есть делает эту текстуру текущей.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Текстуры
Текстуры Наложение текстуры на поверхность объектов сцены повышает ее реалистичность, однако при этом надо учитывать, что этот процесс требует значительных вычислительных затрат. Под текстурой будем понимать некоторое изображение, которое надо определенным образом
Методы наложения текстуры
Методы наложения текстуры При наложении текстуры, как уже упоминалось, надо учитывать случай, когда размеры текстуры отличаются от размеров объекта, на который она накладывается. При этом возможно как растяжение, так и сжатие изображения, и то, как будут проводиться эти
Координаты текстуры
Координаты текстуры Перед нанесением текстуры на объект осталось установить соответствие между точками на поверхности объекта и на самой текстуре. Задавать это соответствие можно двумя методами: отдельно для каждой вершины или сразу для всех вершин, задав параметры
Глава 3 Материалы и текстуры
Глава 3 Материалы и текстуры • Окно Material Editor (Редактор материалов)• Материал типа Standard (Стандартный)• Создание сложных материалов• Использование текстурных картМатериалы, используемые в 3ds Max, позволяют имитировать внешний вид предметов реального мира, а именно такие
Координаты наложения карт текстур. Модификатор UVW Map (UVW-проекция текстуры)
Координаты наложения карт текстур. Модификатор UVW Map (UVW-проекция текстуры) Достаточно часто бывает так, что после применения материала при попытке визуализировать объект программа выдает сообщение об ошибке (рис. 7.18). Рис. 7.18. Окно Missing Map Coordinates (Потеряны проекционные
Понятие текстуры
Понятие текстуры Бытует мнение, что текстура — это изображение, накладываемое на трехмерную модель. Данное утверждение совершенно не верно. Изображение, накладываемое на модель в рамках текстуры, называется картой (Map), понятие же текстуры — шире.Текстура в 3ds Max
Простейшие текстуры
Простейшие текстуры Рассмотрим порядок создания простейших текстур. Простейшими будем считать такие текстуры, которые создаются лишь за счет изменения параметров, но без использования карт (изображений). При помощи таких текстур можно хорошо передать вешний вид и
Текстуры mental ray
Текстуры mental ray Существует несколько типов текстур, которые хорошо подходят при работе с mental ray. В частности, тип Arch & Design (mi) очень удобен при создании большинства материалов, используемых при текстурировании интерьеров и архитектуры. Именно с ним мы и будем
Текстуры и визуализация
Текстуры и визуализация Особенности текстурирования и визуализации интерьеров в стиле минимализм заключаются в том, что текстуры должны быть подобраны максимально грамотно, в тон, а освещение должно быть достаточно ярким и мягким.При создании текстур вам понадобится
Глава 4 Материалы и текстуры
Глава 4 Материалы и текстуры ? Окно Material Editor (Редактор материалов)? Материал типа Standard (Стандартный)? Создание сложных материалов? Использование текстурных карт? Практическое задание. Хромируем все подряд? Практическое задание. Текстурирование натюрмортаМатериалы,
Текстуры
Текстуры Для создания трехмерного изображения объекта проектирования в ArchiCAD имеется достаточно большое количество инструментов. Одним из таких инструментов является создание и использование текстур – объектов, имитирующих структуру поверхности материалов.Текстуры
Текстуры
Текстуры Текстуры являются достаточно непростым и совершенно непредсказуемым видом фотографий. Многим кажется, что насобирать текстур даже у себя дома или во дворе достаточно просто – сюда подойдут и фрагмент кирпичной стены, и асфальт, и гравий, и деревянный забор во
Подготовка
Подготовка Минусовая температура и снег — не самые лучшие условия для цифровой фототехники. При низкой температуре аккумуляторы существенно теряют емкость, поэтому постарайтесь взять с собой запасные. По возможности держите их до съемки в тепле. Когда аккумулятор уже