10.2.1. Настройка приложения Предположим, что изображение уже занесено в наше приложение и его ширина, высота, указатель на изображение и имя текстуры можно передать в функцию инициализации текстуры:

iriit2DTexture( GLint texName. GLint texWidth.
GLint texHeight. GLubyte *texPtr)
{
glBindTexture(GL_TEXTURE_2Q. texName);
glTexParameten(GL_TEXTURE_2D. GL_TEXTURE_WRAP_S, GL_REPEAT): glTexParameteri(GL_TEXTURE_2D. GL_TEXTURE^WRAPJ. GL_REPEAT): glTexParameteri(GL_TEXTURE_2D. GL_TEXTURE_MAG_FILTER. GL_LINEAR): glTexParameteri (GLJEXTUREJD. GL_TEXTURE_MIN_FILTER. GL LINEAR): glTexImage2D(GL_TEXTUREJ?D. 0. GL_RGB. texWidth, texHeight. 0. GL_RGB. GL_UNSIGNED_BYTE. texPtr);
}

Этим создается текстурный объект с именем texName. Вызов функции glTex Parameter устанавливает режимы фильтрации и наложения. Выбираем повторение и линейную фильтрацию. Данные для текстуры задаются функцией glTex-Image2D (значения, передаваемые в нее, будут зависеть от того, как данные изображения сохраняются в памяти).

После того как текстура готова к использованию, молено выполнить следующее:

gl Acti veTexture(GL_TEXTUREO); glBindTexture(GL_TEXTURE_2D. earthTexName):

Эта последовательность вызовов сделает текстурный модуль 0 активным, присоединит текстуру с изображением земли к этому модулю и активизирует ее. Нужно также задать значения двум uniform-переменным. Вершинному шейдеру необходимо знать координаты источника освещения, а фрагментному шейдеру - к какому текстурному модулю нужно обратиться. Координаты источника освещения будут определяться как vec3 в вершинном шейдере под именем light Position, а текстурный модуль - как sampl егЗО во фрагментном шейдере под именем Earth Texture. Код приложения должен узнать, где находятся эти uniform-переменные, и задать им правильные значения. Предположим, что шейдеры уже скомпилированы, скомпонованы в программном объекте programObj и установлены как часть текущего состояния. Для инициализации uniform-переменных выполним следующий код:

lightLoc - glGetUnifnrmLocationARBCprogramObj. "LightPosition"): glUniforra3fARB(HghtLoc. 0.0. 0.0. 4.0);

⇐ Предыдущая| |Следующая ⇒