Гайд API SF | Урок 3 - Render

Тема в разделе "C, C++", создана пользователем CleanLegend, 8 авг 2018 в 11:42.

Статус темы:
Закрыта.
  1. CleanLegend

    Проверенный

    Регистрация:
    28 мар 2013
    Сообщения:
    175
    Симпатии:
    187
    Введение
    Я не буду рассказывать в этой статье, что такое DirectX, D3DDevice и прочее, что Вы можете прочитать в Интернете самостоятельно. Я лишь покажу, как пользоваться готовыми функциями для рисования несложных объектов на экране игры.

    Начало работы
    Для начала Вам надо запомнить, что всё рисуется исключительно в callback-функции Present.

    Откройте исходник плагина, с которым работали в предыдущих двух уроках, и вставьте эту функцию перед определением mainloop:

    bool CALLBACK Present ( CONST RECT *pSourceRect, CONST RECT *pDestRect, HWND hDestWindowOverride,
                                     CONST RGNDATA *pDirtyRegion )
    {
       if( SUCCEEDED( SF->getRender()->BeginRender() ) ) // если рендерер готов к рисованию
       {
           // рисуем
           SF->getRender()->EndRender(); // завершаем рисование
       };
    
       return true; // возвращаем положительный результат
    };
    Затем регистрируем этот callback внутри условного блока if( !init ):

    SF->getRender()->registerD3DCallback( eDirect3DDeviceMethods::D3DMETHOD_PRESENT, Present );
    Покажу простой пример рисования квадрата:

    Там, где помечен комментарий "рисуем", вставляем код:

    SF->getRender()->DrawBox( 500, 500, 25, 25, D3DCOLOR_ARGB( 255, 0, 255, 0 ) );
    Получаем зелёный квадрат в координатах 500:500, размерами 25x25 и зелёным цветом.
    [​IMG]

    Теперь покажу рисование текста.

    Объявляем глобальный указатель на шрифт:
    
    stFontInfo *pFont;
    //Затем один раз инициализируем шрифт:
    
    pFont = SF->getRender()->CreateNewFont("Tahoma", 12, FCR_BORDER );
    //Рисуем в callback-функции Present:
    
    pFont->Print( "текст", D3DCOLOR_ARGB( 255, 255, 255, 0 ), 500, 500, false );
    
    Получаем:
    [​IMG]
    Рисование текстуры:

    Объявляем глобальный указатель на текстуру:
    
    stTextureInfo *pTexture;
    //Инициализируем:
    
    pTexture = SF->getRender()->LoadTextureFromFile( "SAMPFUNCS\\image.png" );
    //Рисуем:
    
    SF->getRender()->DrawTexture( pTexture, 500, 500, pTexture->imgInfo.Width, pTexture->imgInfo.Height, 0, -1 );
    Получаем:
    [​IMG]

    Также текстуры можно загружать из ресурса и буфера, но об этом в другой раз.

    Рисование геометрических фигур:

    SF->getRender()->DrawPolygon( 500, 500, 50, 50, 0, 5, D3DCOLOR_ARGB( 255, 0, 255, 255 ) );
    Рисует пятиугольник в координатах 500:500, с нулевым углом поворота, синим цветом и размерами 50x50:
    [​IMG]

    Остальные функции будут описаны в следующей части урока.

    Автор: urShadow
     
Статус темы:
Закрыта.