Ejemplo n.º 1
0
IZ_BOOL CBillboard::Render(
    izanagi::graph::CGraphicsDevice* device,
    izanagi::sample::CSampleCamera& camera)
{
    izanagi::math::SMatrix44 mtx;
    izanagi::math::SMatrix44::SetUnit(mtx);

    // 軸と並行になる向きにする
    izanagi::math::SMatrix44::GetRotByX(mtx, IZ_DEG2RAD(-90.0f));

    // カメラに正対するようにする
    izanagi::math::SMatrix44 inv;
    {
        izanagi::math::SMatrix44::Copy(inv, camera.GetParam().mtxW2V);

        // 移動成分は消す
        inv.m[3][0] = inv.m[3][1] = inv.m[3][2] = 0.0f;

        // 逆行列にすることで、カメラのW2Vマトリクスと打ち消しあうようにする
        izanagi::math::SMatrix44::Inverse(inv, inv);
    }

    izanagi::math::SMatrix44::Mul(mtx, mtx, inv);

    m_Shader->Begin(device, 0, IZ_FALSE);
    {
        if (m_Shader->BeginPass(0)) {
            _SetShaderParam(
                m_Shader,
                "g_mL2W",
                (void*)&mtx,
                sizeof(mtx));

            _SetShaderParam(
                m_Shader,
                "g_mW2C",
                (void*)&camera.GetParam().mtxW2C,
                sizeof(camera.GetParam().mtxW2C));

            // シェーダ設定
            m_Shader->CommitChanges(device);

            m_Rect->Draw(device);
        }
    }
    m_Shader->End(device);

    return IZ_TRUE;
}
Ejemplo n.º 2
0
IZ_BOOL CBillboardYAxis::Render(
    izanagi::graph::CGraphicsDevice* device,
    izanagi::sample::CSampleCamera& camera)
{
    izanagi::math::SMatrix44 mtx;
    izanagi::math::SMatrix44::SetUnit(mtx);
    izanagi::math::SMatrix44::RotByX(mtx, mtx, IZ_DEG2RAD(-90.0f));

    izanagi::math::SVector4 dir = camera.GetDir();

    if (dir.x == 0.0f) {
    }
    else {
        IZ_FLOAT deg = IZ_RAD2DEG(::atan2(dir.z, dir.x));
        izanagi::math::SMatrix44::RotByY(mtx, mtx, -1.0f * IZ_DEG2RAD(deg) + IZ_MATH_PI1_2);
    }

    m_Shader->Begin(device, 0, IZ_FALSE);
    {
        if (m_Shader->BeginPass(0)) {
            _SetShaderParam(
                m_Shader,
                "g_mL2W",
                (void*)&mtx,
                sizeof(mtx));

            _SetShaderParam(
                m_Shader,
                "g_mW2C",
                (void*)&camera.GetParam().mtxW2C,
                sizeof(camera.GetParam().mtxW2C));

            // シェーダ設定
            m_Shader->CommitChanges(device);

            m_Rect->Draw(device);
        }
    }
    m_Shader->End(device);

    return IZ_TRUE;
}