Exemplo n.º 1
0
        public override Result Render(PMXMesh pmx)
        {
            Device device = swapChain.Device;

            device.SetRenderTarget(0, swapChain.GetBackBuffer(0));
            device.SetRenderState(RenderState.ZEnable, true);
            device.DepthStencilSurface = depthSurface;
            device.Viewport            = Viewport;
            //    device.SetRenderState(RenderState.Lighting, true);
            //    device.SetLight(0, pmx.MatManager.Light);
            //    device.EnableLight(0, true);
            device.SetTransform(TransformState.World, Camera.World);
            device.SetTransform(TransformState.View, Camera.View);
            device.SetTransform(TransformState.Projection, Camera.Projection);
            Sprite texSprite = pmx.TexSprite;

            device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, pmx.MatManager.BGColor, 1.0f, 0);
            device.BeginScene();
            texSprite.Begin(SpriteFlags.ObjectSpace);
            //texSprite.Begin(SpriteFlags.None);
            Vector3 Pos = Vector3.Zero;

            for (int i = 0; i < pmx.Pmx.Material.Count; i++)
            //for (int i = 0; i < 1; i++)
            {
                ExtendedMaterial m   = pmx.GetMaterials()[i];
                Texture          tex = pmx.MatManager.DicObjTex[m.TextureFileName];
                int    width         = tex.GetLevelDescription(0).Width;
                int    height        = tex.GetLevelDescription(0).Height;
                Matrix scaling       = Matrix.Scaling(new Vector3(1.0f / width, 1.0f / height, 1.0f));
                Matrix transpose     = Matrix.Translation(Pos);
                texSprite.Transform = scaling * transpose;
                texSprite.Draw(tex, Color.White);
                if (i % 7 == 6)
                {
                    Pos.X  = 0;
                    Pos.Y += 1;
                }
                else
                {
                    Pos.X += 1;
                }
            }
            texSprite.End();
            pmx.EffectManager.SetMatrix(Camera);
            pmx.EffectManager.BeginUVTec();
            for (int p = 0; p < 1; p++)
            {
                pmx.EffectManager.BeginPass(p);
                for (int i = 0; i < pmx.Pmx.Material.Count; i++)
                {
                    pmx.DrawSubset(i);
                }
                pmx.EffectManager.EndPass();
            }
            pmx.EffectManager.EndTec();
            device.EndScene();
            return(swapChain.Present(Present.None));
        }
Exemplo n.º 2
0
        public virtual Result Render(PMXMesh pmx)
        {
            Device device = swapChain.Device;

            device.SetRenderTarget(0, swapChain.GetBackBuffer(0));

            device.SetRenderState(RenderState.ZEnable, true);
            device.DepthStencilSurface = depthSurface;
            device.Viewport            = Viewport;
            device.SetRenderState(RenderState.Lighting, true);
            device.SetLight(0, pmx.MatManager.Light);
            device.EnableLight(0, true);
            device.SetTransform(TransformState.World, Camera.World);
            device.SetTransform(TransformState.View, Camera.View);
            device.SetTransform(TransformState.Projection, Camera.Projection);


            //アルファブレンド
            device.SetRenderState(RenderState.SourceBlend, Blend.SourceAlpha);
            device.SetRenderState(RenderState.DestinationBlend, Blend.InverseSourceAlpha);
            device.SetRenderState(RenderState.AlphaBlendEnable, true);

            device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, pmx.MatManager.BGColor, 1.0f, 0);
            device.BeginScene();
            for (int i = 0; i < pmx.Pmx.Material.Count; i++)
            {
                ExtendedMaterial m = pmx.GetMaterials()[i];
                device.Material = m.MaterialD3D;
                device.SetTexture(0, pmx.MatManager.DicObjTex[m.TextureFileName]);
                if (pmx.Pmx.Material[i].BothDraw)
                {
                    device.SetRenderState(RenderState.CullMode, Cull.None);
                }
                else
                {
                    device.SetRenderState(RenderState.CullMode, Cull.Counterclockwise);
                }
                pmx.DrawSubset(i);
            }
            device.EndScene();
            return(swapChain.Present(Present.None));
        }