// устанавливаем масштабирование пикселей glPixelZoom(zoomx,zoomy);

// устанавливаем растровую позицию glRasterPos3i(0,0, -10) ; fi.torgb(); // вывод изображения }

Наложение текстур

Изображение, накладываемое на поверхность объекта, называется текстурой. Современные видеокарты аппаратно поддерживают наложение текстур и имеют большой объем видеопамяти для их хранения, что позволяет освободить обычную память. OpenGL рассматривает текстуру как некий объект, имеющий собственный идентификатор или имя.

Размеры изображения, используемого в качестве текстуры, должны быть степенью двойки. Кроме 24- и 32-битных изображений в качестве расширения в OpenGL добавлена поддержка 8-битных изображений для текстур. В процессе выполнения программы можно менять все или часть изображения текстуры. Подбор текстур является очень ответственным делом, ибо они сильно влияют на визуальное восприятие объекта. Обычно изображения получают путем сканирования реальных изображений с последующей обработкой. Особенно часто приходится сглаживать границы изображения, если предполагается не растягивать текстуру, а последовательно накладывать на большую поверхность, Тексель - наименьший элемент текстуры. Текстурные координаты, или координаты покрытия - координаты текселя, назначаемого вершине. Принятые имена для текстурных координат: s,t,r,q. В последних версиях OpenGL и как расширение включена поддержка трехмерных текстур, которые рассматриваются как п изображений наложенных друг на друга. В этом случае г координата используется для доступа текселя внутри текстуры. Координата q может быть задействована при реализации текстурных эффектов с использованием текстурной матрицы преобразований. Координаты текселей текстуры отображаются в промежуток [0; 1 ].

Существуют две реакции OpenGL, когда вершине назначается значение текстурной координаты вне диапазона [0; 1 ]. В режиме GL_CLAMP текстура растягивается, что позволяет полностью обернуть объект текстурой. В режиме GL_REPEAT осуществляется тайловое покрытие, т. е. поверхность как бы закрашивается текстурой. Применяя в цикле или по таймеру преобразования текстурных координат, можно создать текстурную анимацию для привнесения дополнительной динамичности и реалистичности.

В OpenGL существует возможность автоматического вычисления каждой текстурной координаты для выводимых вершин. В этом случае значение текстурной координаты, указываемой непосредственно функцией glTexCoord, игнорируется. Например, следующий код устанавливает прямое отображение х координаты вершины в s координату и у в t.

float sp[4]={1,0,0,0}; float tp[4]={0,1,0,0};

glTexGeni(GL_S,GL_TEXTURE_GEN_MODE,GL_OBJECT_LINEAR); glTexGeni(GL_T,GL_TEXTURE_GEN_MODE,GL_OBJECT_LINEAR); glTexGenfv(GL_S,GL_OBJECT_PLANE,sp); glTexGenfv(GL_T,GL_OBJECT_PLANE,tp); Так как кривые линии и поверхности описываются параметрическими координатами и и v, то OpenGL использует их и для вычисления текстурных координат. Следующий код устанавливает прямое отображение и координаты в s и v в t для наложения текстуры на поверхность Безье.


⇐ вернуться назад | | далее ⇒