/// <summary> /// 描画時に呼び出されるスプライト処理 /// </summary> /// <param name="totalTime"></param> /// <param name="elapsedTime"></param> /// <param name="render"></param> /// <param name="cbd"></param> /// <returns></returns> internal override int CallDrawingSprite( double totalTime, float elapsedTime, IMCSpriteRender render, MCCallBatchDrawing cbd ) { MCVector3 pos = new MCVector3(); MCMatrix4x4 mWVP = MCMatrix4x4.Identity; var spriteRender = (MCRenderAlphanumericSprite)render; // 頂点値を更新 spriteRender.VertexUpdate(this, out pos); // 位置の計算 if (IsBillbord) { // ビルボードである(使用できない Debug.Assert(false); } else { MCMatrix4x4 mTmp = MCMatrix4x4.Identity; // 通常スプライト mTmp.MakeRotationYawPitchRoll(m_angle.Y, m_angle.X, m_angle.Z); // 位置 mTmp.M41 += m_position.X; mTmp.M42 += m_position.Y; mTmp.M43 += m_position.Z; // スケール値 mTmp.M11 *= m_scale.X; mTmp.M21 *= m_scale.Y; mTmp.M12 *= m_scale.X; mTmp.M22 *= m_scale.Y; mTmp.M13 *= m_scale.X; mTmp.M23 *= m_scale.Y; mTmp.M14 *= m_scale.X; mTmp.M24 *= m_scale.Y; mWVP = mTmp * cbd.GetCurrentCamera().ViewProjMatrix; } cbd.SetWVP(ref mWVP); cbd.SetUniqueValue(m_uniquetValue); Sprite.Texture00.SetResource(cbd.GetDiffuseTexture()); EffectPass pass = cbd.GetEffect().GetCurrentEffectPass(); App.LayoutMgr.IASetInputLayout(pass, (int)spriteRender.GetLayoutKind()); pass.Apply(App.ImmediateContext); if (BlendState != (uint)BLENDSTATE.UNDEFINED) { App.BlendStateMgr.OMSetBlendState(BlendState); } spriteRender.Render(App.ImmediateContext, pass, this); return(0); }
/// <summary> /// 描画時に呼び出されるスプライト処理 /// </summary> /// <param name="totalTime">アプリケーションが開始してからの経過時間 (秒単位) です。</param> /// <param name="elapsedTime">最後のフレームからの経過時間 (秒単位) です。</param> /// <param name="render">スプライトのレンダー</param> /// <param name="bd"></param> /// <returns></returns> internal override int CallDrawingSprite( double totalTime, float elapsedTime, IMCSpriteRender render, MCCallBatchDrawing cbd ) { int hr = 0; MCMatrix4x4 mTmp = MCMatrix4x4.Identity, mWVP = MCMatrix4x4.Identity; var spriteRender = (MCRenderSquareTilesSprite)render; // 頂点値を更新 spriteRender.VertexUpdate(this); // 位置の計算 if (IsBillbord) { // ビルボードである(使用できない Debug.Assert(false); } else { // 通常スプライト // 位置 mTmp.M41 += m_position.X; mTmp.M42 += m_position.Y; mTmp.M43 += m_position.Z; mWVP = mTmp * cbd.GetCurrentCamera().ViewProjMatrix; } cbd.SetWVP(ref mWVP); cbd.SetUniqueValue(m_uniquetValue); Sprite.Texture00.SetResource(cbd.GetDiffuseTexture()); EffectPass pass = cbd.GetEffect().GetCurrentEffectPass(); hr = App.LayoutMgr.IASetInputLayout(pass, (int)spriteRender.GetLayoutKind()); spriteRender.VertexUpdate(this); spriteRender.Render(App.ImmediateContext, pass, this); return(hr); }
/// <summary> /// 描画時に呼び出されるスプライト処理 /// </summary> /// <param name="totalTime">アプリケーションが開始してからの経過時間 (秒単位) です。</param> /// <param name="elapsedTime">最後のフレームからの経過時間 (秒単位) です。</param> /// <param name="render">スプライトのレンダー</param> /// <param name="bd"></param> /// <returns></returns> internal override int CallDrawingSprite( double totalTime, float elapsedTime, IMCSpriteRender render, MCCallBatchDrawing cbd ) { int hr = 0; MCMatrix4x4 mTmp = MCMatrix4x4.Identity, mWVP; var spriteRender = (MCRenderSquareAmountSprite)render; // 頂点値を更新 spriteRender.VertexUpdate(this); // 位置の計算 if (IsBillbord) { // ビルボードである if (IsBillbordConstX) { m_angle.X = cbd.GetCurrentCamera().WorldPitch; } if (IsBillbordConstY) { m_angle.Y = cbd.GetCurrentCamera().WorldYaw; } m_angle.Z += cbd.GetCurrentCamera().WorldRoll; if (m_angle.Z >= UtilMathMC.PI2) { m_angle.Z -= UtilMathMC.PI2; } mTmp.MakeRotationXZY(m_angle); // 位置 mTmp.M41 = m_position.X; mTmp.M42 = m_position.Y; mTmp.M43 = m_position.Z; // スケール値 mTmp.M11 *= m_scale.X; mTmp.M21 *= m_scale.Y; mTmp.M12 *= m_scale.X; mTmp.M22 *= m_scale.Y; mTmp.M13 *= m_scale.X; mTmp.M23 *= m_scale.Y; mTmp.M14 *= m_scale.X; mTmp.M24 *= m_scale.Y; mWVP = mTmp * cbd.GetCurrentCamera().ViewProjMatrix; } else { // 通常スプライト //if( !(m_angle.Y == m_angle.X && m_angle.X == m_angle.Y && m_angle.Y == 0.0f) ) mTmp.MakeRotationYawPitchRoll(m_angle.Y, m_angle.X, m_angle.Z); // 位置 mTmp.M41 += m_position.X; mTmp.M42 += m_position.Y; mTmp.M43 += m_position.Z; // スケール値 mTmp.M11 *= m_scale.X; mTmp.M21 *= m_scale.Y; mTmp.M12 *= m_scale.X; mTmp.M22 *= m_scale.Y; mTmp.M13 *= m_scale.X; mTmp.M23 *= m_scale.Y; mTmp.M14 *= m_scale.X; mTmp.M24 *= m_scale.Y; mWVP = mTmp * cbd.GetCurrentCamera().ViewProjMatrix; } cbd.SetWVP(ref mWVP); cbd.SetUniqueValue(m_uniquetValue); Sprite.Texture00.SetResource(cbd.GetDiffuseTexture()); EffectPass pass = cbd.GetEffect().GetCurrentEffectPass(); hr = App.LayoutMgr.IASetInputLayout(pass, (int)spriteRender.GetLayoutKind()); pass.Apply(App.ImmediateContext); if (BlendState != (uint)BLENDSTATE.UNDEFINED) { App.BlendStateMgr.OMSetBlendState((int)BlendState); } spriteRender.Render(App.ImmediateContext, pass, this); return(0); }