Народный учебник по OpenGL


Урок 22. Наложение микрорельефа - часть 10


    glPixelTransferf(GL_GREEN_SCALE,0.5f); // поскольку нам нужна половинная интенсивность

    glPixelTransferf(GL_BLUE_SCALE,0.5f);

    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP);  // Не укладывать паркетом

    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP);

    glGenTextures(3, bump);  // Создать три текстуры

 

    // Создать текстуру с фильтром по ближайшему

    >…<

 

    // Создать текстуру с фильтром усреднения

    >…<

 

    // Создать текстуру с мип-наложением

    >…<

 

С этой фразой вы уже знакомы: по причинам, объясненным ниже, нужно создать инвертированную карту рельефа с той же 50% яркостью. Для этого вычтем полученный ранее растр из чистого белого цвета {255, 255, 255}. Поскольку мы НЕ возвращали RGB-масштабирование на 100% уровень (я три часа разбирался, пока понял, что здесь скрывалась основная ошибка первой версии урока!), инверсный рельеф тоже получится 50% яркости.

 

    for (int i=0; i<3*Image->sizeX*Image->sizeY; i++) // Проинвертируем растр

      Image->data[i]=255-Image->data[i];

 

    glGenTextures(3, invbump); // Создадим три текстуры

 

    // с фильтром по ближайшему

    >…<

 

    // с фильтром усреднения

    >…<

 

    // с мип-наложением

    >…<

  }

  else status=false;

  if (Image) { // Если текстура существует

    if (Image->data) delete Image->data; // Если изображение текстуры существует

    delete Image;

    Image=NULL;

  }

 

Загрузка изображения логотипа очень проста, кроме, разве что, фрагмента рекомбинации RGB-A. Он, впрочем, тоже достаточно очевиден. Заметьте, что текстура строится на основе alpha-, а не Image-блока! Здесь применена только одна фильтрация.

 

  // Загрузка картинки логотипа

  if (Image=auxDIBImageLoad("Data/OpenGL_ALPHA.bmp")) {

    alpha=new char[4*Image->sizeX*Image->sizeY];

    // Выделим память для RGBA8-текстуры

    for (int a=0; a<Image->sizeX*Image->sizeY; a++)




- Начало -  - Назад -  - Вперед -



Книжный магазин