Пример #1
0
        /// <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);
        }
Пример #2
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);
        }