public void Del(MetalXModel model) { items.Remove(model); }
/// <summary> /// 加载.X文件 /// </summary> /// <param name="fileName">文件路径+文件名</param> /// <returns>MetalX模型</returns> public MetalXModel LoadDotX(string fileName) { GraphicsStream adj; ExtendedMaterial[] extendedMaterials; EffectInstance[] effectInstances; Mesh mesh = Mesh.FromFile(fileName, MeshFlags.Managed, Devices.D3DDev, out adj, out extendedMaterials, out effectInstances); MetalXModel model = new MetalXModel(); MemoryStream tms = new MemoryStream(); mesh.Save(tms, adj, extendedMaterials, effectInstances, XFileFormat.Compressed); //model.MeshData.Position = 0; model.MeshData = tms.ToArray(); model.MEMMesh = mesh; model.MEMTextures = new Microsoft.DirectX.Direct3D.Texture[extendedMaterials.Length]; model.MEMMaterials = new Material[extendedMaterials.Length]; model.TexturesData = new byte[extendedMaterials.Length][]; for (int i = 0; i < extendedMaterials.Length; i++) { if (extendedMaterials[i].TextureFilename != null && extendedMaterials[i].TextureFilename != string.Empty) { model.MEMTextures[i] = TextureLoader.FromFile(Devices.D3DDev, extendedMaterials[i].TextureFilename); FileStream fs = System.IO.File.OpenRead(extendedMaterials[i].TextureFilename); byte[] buf = new byte[(int)fs.Length]; fs.Read(buf, 0, buf.Length); model.TexturesData[i] = buf; model.MEMMaterials[i] = extendedMaterials[i].Material3D; } } model.MEMCount = extendedMaterials.Length; return model; }
public void Add(MetalXModel model) { items.Add(model); }
/// <summary> /// 绘制MetalX格式模型 /// </summary> /// <param name="model">MetalX格式模型</param> /// <param name="loc">位置</param> /// <param name="XYZ">XYZ轴角度</param> /// <param name="YPR">YawPitchRoll角度</param> public void DrawMetalXModel(MetalXModel model, Vector3 loc, Vector3 XYZ, Vector3 YPR) { for (int i = 0; i < model.MEMCount; i++) { Devices.D3DDev.Material = model.MEMMaterials[i]; Devices.D3DDev.SetTexture(0, model.MEMTextures[i]); Devices.D3DDev.Transform.World = Matrix.Translation(loc) * Matrix.RotationX(XYZ.X) * Matrix.RotationY(XYZ.Y) * Matrix.RotationZ(XYZ.Z) * Matrix.RotationYawPitchRoll(YPR.X, YPR.Y, YPR.Z); model.MEMMesh.DrawSubset(i); } }