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 void Render(IDXViewForm[] forms, PMXMesh mesh)
        {
            Result hr;

            for (int i = 0; i < forms.Length; i++)
            {
                hr = forms[i].ViewPort.Render(mesh);
                LoopForResetDevice(forms, hr);
            }
        }
Exemplo n.º 3
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));
        }
Exemplo n.º 4
0
        public void SetTexDics(PMXMesh mesh)
        {
            SetWhite(mesh.Device);
            string savedCurrentDir = Directory.GetCurrentDirectory();

            Directory.SetCurrentDirectory(Path.GetDirectoryName(mesh.Pmx.FilePath));
            HashSet <string> hashObj  = new HashSet <string>();
            HashSet <string> hashToon = new HashSet <string>();
            HashSet <string> hashSph  = new HashSet <string>();

            foreach (var m in mesh.Pmx.Material)
            {
                hashObj.Add(m.Tex);
                hashToon.Add(m.Toon);
                hashSph.Add(m.Sphere);
            }
            SetDic(mesh.Device, hashObj, DicObjTex);
            SetDic(mesh.Device, hashToon, DicToonTex);
            SetDic(mesh.Device, hashSph, DicSphTex);

            // デフォルトToon追加
            Directory.SetCurrentDirectory(toonDir);
            string[] defToon =
            {
                "toon01.bmp", "toon02.bmp",
                "toon03.bmp", "toon04.bmp",
                "toon05.bmp", "toon06.bmp",
                "toon07.bmp", "toon08.bmp",
                "toon09.bmp", "toon10.bmp"
            };
            foreach (string s in defToon)
            {
                if (!DicToonTex.ContainsKey(s))
                {
                    DicToonTex.Add(s, Texture.FromFile(mesh.Device, s));
                }
            }

            Directory.SetCurrentDirectory(savedCurrentDir);
        }