Exemplo n.º 1
0
        /// <summary>
        /// エフェクトにマトリックスを適用
        /// </summary>
        /// <param name="mode">描画モード</param>
        /// <param name="world">ワールド</param>
        public virtual void SetParams(MMDDrawingMode mode, ref Matrix world)
        {
            Matrix view, projection;
            //カメラ情報の取得
            Viewport viewport = effect.Device.Viewport;
            float aspectRatio = (float)viewport.Width / (float)viewport.Height;
            SlimMMDXCore.Instance.Camera.GetCameraParam(aspectRatio, out view, out projection);

            //マトリクス処理
            effect.SetValue("World", world);
            effect.SetValue("View", view);
            effect.SetValue("Projection", projection);
            effect.SetValue("EyePosition", SlimMMDXCore.Instance.Camera.Position);
            //ライティング処理
            Vector3 color, dir;
            SlimMMDXCore.Instance.Light.GetLightParam(out color, out dir);
            effect.SetValue("AmbientLightColor", color);
            effect.SetValue("DirLight0Direction", dir);
            switch (mode)
            {
                case MMDDrawingMode.Normal:
                    effect.Technique = "MMDEffect";
                    break;
                case MMDDrawingMode.Edge:
                    effect.Technique = "MMDNormalDepth";
                    break;
                default:
                    throw new NotImplementedException();
            }
        }
Exemplo n.º 2
0
 public virtual void SetFace(IMMDFaceManager faceManager) { }//こちらではなにもしない
 /// <summary>
 /// 描画
 /// </summary>
 /// <param name="mode">モデル描画モード</param>
 public virtual void Draw(MMDDrawingMode mode)
 {
     SlimMMDXCore.Instance.Device.Indices = indexbuffer;
     effect.Begin();
     effect.BeginPass(0);
     SlimMMDXCore.Instance.Device.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, vertexCount, startIndex, triangleCount);
     effect.EndPass();
     effect.End();
 }
Exemplo n.º 3
0
 /// <summary>
 /// 各パーツを描画した後に呼ばれる
 /// </summary>
 /// <param name="mode">モデル描画モード</param>
 protected virtual void AfterDraw(MMDDrawingMode mode) { }
Exemplo n.º 4
0
        /// <summary>
        /// 各パーツを描画する前に呼ばれる
        /// </summary>
        protected override void BeforeDraw(MMDDrawingMode mode)
        {
            //頂点バッファの更新
            DataStream stream = vertexBuffer.Lock(0, 0, LockFlags.Discard);
            stream.WriteRange(verticesSource);
            vertexBuffer.Unlock();
            
            //頂点バッファのセット処理
            SlimMMDXCore.Instance.Device.VertexDeclaration = vertexDec;
            SlimMMDXCore.Instance.Device.SetStreamSource(0, vertexBuffer, 0, Marshal.SizeOf(typeof(VertexPNmTx)));
            
            //カリング

            SlimMMDXCore.Instance.Device.SetRenderState(RenderState.CullMode, Culling ? Cull.Counterclockwise : Cull.None);
            //透過設定
            switch (mode)
            {
                case MMDDrawingMode.Normal:
                    SlimMMDXCore.Instance.Device.SetRenderState(RenderState.AlphaBlendEnable, true);
                    SlimMMDXCore.Instance.Device.SetRenderState(RenderState.SourceBlend, Blend.SourceAlpha);
                    SlimMMDXCore.Instance.Device.SetRenderState(RenderState.DestinationBlend, Blend.InverseSourceAlpha);
                    SlimMMDXCore.Instance.Device.SetRenderState(RenderState.BlendOperation, BlendOperation.Add);
                    SlimMMDXCore.Instance.Device.SetRenderState(RenderState.AlphaFunc, Compare.Greater);
                    SlimMMDXCore.Instance.Device.SetRenderState(RenderState.AlphaTestEnable, true);
                    SlimMMDXCore.Instance.Device.SetRenderState(RenderState.AlphaRef, 0);
                    break;
                case MMDDrawingMode.Edge:
                    SlimMMDXCore.Instance.Device.SetRenderState(RenderState.AlphaBlendEnable, false);
                    SlimMMDXCore.Instance.Device.SetRenderState(RenderState.BlendOperation, BlendOperation.Add);
                    SlimMMDXCore.Instance.Device.SetRenderState(RenderState.AlphaFunc, Compare.Always);
                    SlimMMDXCore.Instance.Device.SetRenderState(RenderState.AlphaTestEnable, false);
                    SlimMMDXCore.Instance.Device.SetRenderState(RenderState.AlphaRef, 0);
                    break;
                default:
                    throw new NotImplementedException();
            }
            base.BeforeDraw(mode);
        }
Exemplo n.º 5
0
 /// <summary>
 /// 各パーツを描画する前に呼ばれる
 /// </summary>
 /// <param name="mode">モデル描画モード</param>
 protected virtual void BeforeDraw(MMDDrawingMode mode) { }