Esempio n. 1
0
// 描画.
void CMouseHit::RenderInternal(izanagi::graph::CGraphicsDevice* device)
{
    izanagi::sample::CSampleCamera& camera = GetCamera();

    device->SetRenderState(
        izanagi::graph::E_GRAPH_RS_CULLMODE,
        izanagi::graph::E_GRAPH_CULL_NONE);

    static const izanagi::math::SVector4 color[2] = {
        { 1.0f, 1.0f, 1.0f, 1.0f },
        { 1.0f, 1.0f, 1.0f, 0.5f },
    };

    m_Shader->Begin(0, IZ_FALSE);
    if (m_Shader->BeginPass(0)) {
        // パラメータ設定
        _SetShaderParam(
            m_Shader,
            "g_mL2W",
            (void*)&m_Triangles.mtx,
            sizeof(m_Triangles.mtx));

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

        const izanagi::math::SVector4& clr = (m_IsCross ? color[1] : color[0]);

        _SetShaderParam(
            m_Shader,
            "g_Color",
            (void*)&clr,
            sizeof(clr));

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

        device->SetVertexDeclaration(m_VD);
        device->SetVertexBuffer(
            0, 0,
            m_Triangles.vb->GetStride(), 
            m_Triangles.vb);
        device->DrawPrimitive(
            izanagi::graph::E_GRAPH_PRIM_TYPE_TRIANGLELIST,
            0, 1);

        m_Shader->EndPass();
    }

    m_Shader->End();
}
Esempio n. 2
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;
}
Esempio n. 3
0
// 描画.
void CResourceManagerApp::RenderInternal(izanagi::graph::CGraphicsDevice* device)
{
    izanagi::CModel* mdl = IZ_NULL;
    {
        izanagi::CObject* obj = m_RscMgr->Find(
            IZ_CC3('m', 'd', 'l'),
            izanagi::CKey("Seymour.mdl"));
        if (obj != IZ_NULL) {
            mdl = (izanagi::CModel*)obj;
        }
    }

    izanagi::CImage* img = IZ_NULL;
    {
        izanagi::CObject* obj = m_RscMgr->Find(
            IZ_CC3('i', 'm', 'g'),
            izanagi::CKey("ModelImage.img"));
        if (obj != IZ_NULL) {
            img = (izanagi::CImage*)obj;
        }
    }
    
    izanagi::shader::CShaderBasic* shd = IZ_NULL;
    {
        izanagi::CObject* obj = m_RscMgr->Find(
            IZ_CC3('s', 'h', 'd'),
            izanagi::CKey("SkinShader.shd"));
        if (obj != IZ_NULL) {
            shd = (izanagi::shader::CShaderBasic*)obj;
        }
    }

    izanagi::sample::CSampleCamera& camera = GetCamera();

    IZ_UINT passCnt = shd->Begin(device, 0, IZ_FALSE);
    {
        IZ_ASSERT(passCnt >= 1);
        if (shd->BeginPass(0)) {
            // シェーダ定数セット
            {
                _SetShaderParam(
                    shd,
                    "g_mW2C",
                    (void*)&camera.GetParam().mtxW2C,
                    sizeof(camera.GetParam().mtxW2C));
            }

            // テクスチャセット
            device->SetTexture(0, img->GetTexture(0));

            shd->CommitChanges(device);

            // モデル描画
            mdl->Render(device);

            shd->EndPass();
        }
    }
    shd->End(device);
}
Esempio n. 4
0
// 描画.
void UnityChanApp::RenderInternal(izanagi::graph::CGraphicsDevice* device)
{
    izanagi::sample::CSampleCamera& camera = GetCamera();

    // シェーダパラメータセット
    {
        const izanagi::math::SMatrix44& mtxW2C = camera.GetParam().mtxW2C;
        _SetShaderParam(m_Shd, "g_mW2C", &mtxW2C, sizeof(mtxW2C));
    }

    // 描画
    m_RenderGraph->Render(
        device,
        m_Renderer,
        m_MdlRenderHandler);


    if (device->Begin2D()) {
        izanagi::CDebugFont* debugFont = GetDebugFont();
        debugFont->Begin(device, 0, izanagi::CDebugFont::FONT_SIZE * 2);

        IZ_FLOAT t = m_Timeline.GetTime();

        debugFont->DBPrint(
            device,
            "(%s) [%.3f] \n",
            anmFileName[posAnm], t);

        debugFont->End();

        device->End2D();
    }
}
Esempio n. 5
0
// 描画.
void CMotionBindApp::RenderInternal(izanagi::graph::CGraphicsDevice* device)
{
    izanagi::sample::CSampleCamera& camera = GetCamera();

#if 0
    IZ_UINT passCnt = m_Shd->Begin(0, IZ_FALSE);
    {
        IZ_ASSERT(passCnt >= 1);
        if (m_Shd->BeginPass(0)) {
            // シェーダ定数セット
            {
                _SetShaderParam(
                    m_Shd,
                    "g_mW2C",
                    (void*)&camera.GetParam().mtxW2C,
                    sizeof(camera.GetParam().mtxW2C));
            }

            // テクスチャセット
            //device->SetTexture(0, m_Img->GetTexture(IMG_IDX));

            m_Shd->CommitChanges();

            // モデル描画
            m_Mdl->Render();

            m_Shd->EndPass();
        }
    }
    m_Shd->End();
#else
    _SetShaderParam(
        m_Shd,
        "g_mW2C",
        (void*)&camera.GetParam().mtxW2C,
        sizeof(camera.GetParam().mtxW2C));

    m_RenderGraph->Render(
        device,
        m_Renderer,
        s_MdlRenderHandler);
#endif
}
Esempio n. 6
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;
}