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)); }
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); } }
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)); }
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); }