/// <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); }
public bool GetSpriteRenderType(int idx, out IMCSpriteRender render) { render = null; if (m_spriteRenders.Count <= idx) { return(false); } render = m_spriteRenders[idx]; return(true); }
/// <summary> /// スプライトタイプをセットする /// </summary> /// <param name="no">スプライト番号</param> /// <returns></returns> internal bool SetSpriteTypeNo(int no) { IMCSpriteRender render; bool ret = App.SpriteMgr.GetSpriteRenderType(no, out render); if (ret) { m_spriteTypeNo = no; m_spSpriteRender = render; } return(ret); }
public bool GetSpriteRenderType(Guid id, out IMCSpriteRender render) { render = null; if (!m_spriteRendersIdx.ContainsKey(id)) { return(false); } var i = m_spriteRendersIdx[id]; if (m_spriteRenders.Count <= i) { return(false); } render = m_spriteRenders[i]; return(true); }
/// <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); }
/// <summary> /// 描画時に呼び出されるスプライト処理 /// </summary> /// <param name="totalTime">アプリケーションが開始してからの経過時間 (秒単位) です。</param> /// <param name="elapsedTime">最後のフレームからの経過時間 (秒単位) です。</param> /// <param name="render">スプライトのレンダー</param> /// <param name="bd"></param> /// <returns></returns> internal abstract int CallDrawingSprite( double totalTime, float elapsedTime, IMCSpriteRender render, MCCallBatchDrawing bd );