// 描画. 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(); }
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; }
// 描画. 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); }
// 描画. 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(); } }
// 描画. 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 }
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; }