Разработки          Услуги          О компании          Контакты  

Материал из биософт-м

Перейти к: навигация, поиск

  !   Данная информация предназначена только только для IT-специалистов по системной интеграции модулей БИОСОФТ-М. (см. Руководства пользователя к программным продуктам)

Текстура

Допустим мы хотим изобразить в нашей программе движение эмбола по сосуду. В этом случае мы можем, создать трехмерную модель эмбола из большого числа полигонов и перемещать ее в пространстве. Компьютер должен будет очень много считать, чтобы каждый раз заново отображать эту модель. Существует альтернативный вариант: мы создаем в пространстве обычный четырехугольник и на него накладываем изображение эмбола. Теперь при кажой отрисовке компьютеру нужно просто вывести картинку на четырехугольнике, что гораздо быстрей.

Атлас текстур

Когда эмбол будет лететь по сосуду, он будет ударяться о его стенки, как-то вращаться и если мы будем показывать его всегда с одной стороны получится не очень реалистично. Поэтому нам понадобится много изображений эмбола, с различных ракурсов, которые по очереди будут накладываться на наш прямоугольник. Мы могли бы создавать отдельную текстуру для каждого изображения, но это не самый эффективный способ. Лучше сделать одну большую картинку, в которой содержатся все возможные изображения эмбола, и загрузить ее как одну текстуру. Графичиские библиотеки предоставляют возможность укзать, какую часть текстуры мы хотим в данный момент использовать. Эта большая картинка со всевозможными вариантами назвается Атласом текстур.

Использование текстур в OpenGL Lib

Создание атласа текстур

OpenGL Lib работает только с атласами текстур, которые хранятся в специальном внутреннем формате. Чтобы загрузить отдельную картинку, как текстуру из нее тоже придется сделать атлас. Для генерации атласа нужен файл с картинкой и файл с описанием его содержимого. Оба эти файла получаются с использованием http://spritesheetpacker.codeplex.com. Для создания атласа текстур во внутреннем формате используется следующий метод класса COpenGlTextureIfaceGp:

class COpenGlTextureIfaceGp : public object
{
public:
 
// ...
 
    // creates texture in internal format
    sbuf CreateNewTextureInInternalFormat(
            path pathTexturePng,
            path pathTextureDescription)
            new virtual auto;
 
// ...
 
};

Спрайт

Атлас текстур состоит из спрайтов. Спрайтом назовем некоторый фиксированный набор кадров анимации. Каждый спрайт задается уникальным текстовым идентифкатором. Каждый кадр спрайта задается порядковым номером от 0. Таким образом для того, чтобы вывести конкретное изображение OpenGL Lib нужно сообщить его идентификатор и порядковый номер.

Использование текстуры

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

    ref<COpenGlTextureIfaceGp> rOpenGlTexture;
 
    rOpenGlTexture->
        InitTexture(
            m_rOpenGl,
            "c:\\test.texture");
 
    m_rOpenGl->x_rOpenGlScene->AddNewTextureToScene(rOpenGlTexture);

После этого нужно связать текстуру с моделью

    //
    // Init model
    //
 
    m_rOpenGlModel = ref<COpenGlModelIfaceGp>()->NewOpenGlModel2d();
 
    // IDB_SHT_TGT_BAD - is unique id for our sprite
    m_rOpenGlModel->AssignTexture(
        rOpenGlTexture,
        "IDB_SHT_TGT_BAD");
 
    m_rOpenGlModel->SetModelLocation(point3d(100, 100, 0));
    m_rOpenGlModel->SetSizeFor2dModel(64, 64);
 
    m_rOpenGl->x_rOpenGlScene->AddNewModelToScene(m_rOpenGlModel);

Выбор текущего кадра производится следующим кодом:

    // ...
 
    m_rOpenGlModel->SetCurrentSpiteImage(iSprite);
www.biosoft-m.ru



Просмотры
Личные инструменты