1

Тема: DirectXTK spritefont

Як створити ресурс-файл font_name.spritefont у DirectXTK?

2 Востаннє редагувалося Yola (29.04.2016 11:04:45)

Re: DirectXTK spritefont

Ага, все просто, у DirectXTK є приладдя для цього

MakeSpriteFont.exe "Times New Roman" TimesNewRoman.spritefont /FontSize:16

А потім дуже зручно використовувати. Моя функція для відмальовки тексту така:

    void Renderer::DrawText2D(const char *text, const XMFLOAT2 pos, FXMVECTOR color)
    {
        size_t size = strlen(text) + 1;
        wchar_t* wtext = new wchar_t[size];
        mbstowcs_s(&size, wtext, size, text, _TRUNCATE);
        m_SpriteBatch->Begin();
        m_SpriteFont->DrawString(m_SpriteBatch, wtext, pos, color);
        m_SpriteBatch->End();

        delete[] wtext;
    }

а це ініціалізація

    void Renderer::InitFonts()
    {
        m_SpriteBatch = new SpriteBatch(m_ImmediateContext.Get());
        m_SpriteFont = new SpriteFont(m_Device.Get(), L"Resources/TimesNewRoman.spritefont");
    }
Подякували: leofun012

3

Re: DirectXTK spritefont

Цікаво, що в DirectX я робив так:

    // Перевести в однорідний clip space.
    vout.m_PosH = mul(float4(vin.m_PosL, 1.0f), gWorldViewProj);

де

// Матрицю необхідно трансформувати оскільки DirectX 11 рядково-головний (row major)
XMMATRIX worldViewProj = XMMatrixTranspose(world * view * proj);

і у свою чергу

world = scale * transform;

А OpenGl навпаки

world = transform * scale;

І у шейдері

gl_Position = worldViewProj * vec4(position, 1.0);

Здається це тому, що openGl стовпчиково-головний.

Зауважу, що рядково чи стовпчиково-головний ніяк не впливає на викладку матриці у пам'яті. І множити на матрицю треба справа чи зліва в залежності від того рядково чи стовпчиково вона головна.

Подякували: leofun012