public static BoundingBox BoundingBoxFromXMesh(SlimDX.Direct3D9.Mesh mesh) { var c = mesh.LockVertexBuffer(SlimDX.Direct3D9.LockFlags.ReadOnly); var b = SlimDX.BoundingBox.FromPoints(c, mesh.VertexCount, mesh.BytesPerVertex); c.Close(); mesh.UnlockVertexBuffer(); return(b); }
public Mesh(SlimDX.Direct3D9.Mesh mesh) { if (mesh.BytesPerVertex != Vertex.PositionNormalTexcoord.Instance.Size || mesh.VertexFormat != Vertex.PositionNormalTexcoord.Instance.VertexFormat) { throw new Exception("Mesh vertex buffer needs to be in the format Position3Normal3Texcoord3"); } var vb = mesh.LockVertexBuffer(SlimDX.Direct3D9.LockFlags.ReadOnly); NVertices = (int)vb.Length / Vertex.PositionNormalTexcoord.Instance.Size; var vbs = vb.ReadRange <Vertex.PositionNormalTexcoord>(NVertices); VertexBuffer = new VertexBuffer <Vertex.PositionNormalTexcoord>(vbs); mesh.UnlockVertexBuffer(); vb.Close(); var ib = mesh.LockIndexBuffer(SlimDX.Direct3D9.LockFlags.ReadOnly); NFaces = mesh.FaceCount; if ((mesh.CreationOptions & SlimDX.Direct3D9.MeshFlags.Use32Bit) == 0) { List <int> ibs = new List <int>(); foreach (var v in ib.ReadRange <short>(NFaces * 3)) { ibs.Add(v); } IndexBuffer = new IndexBuffer(ibs.ToArray()); } else { IndexBuffer = new IndexBuffer(ib.ReadRange <int>(NFaces * 3)); } mesh.UnlockIndexBuffer(); ib.Close(); VertexStreamLayout = Vertex.PositionNormalTexcoord.Instance; MeshType = MeshType.Indexed; }
public Mesh CreateCylinderMesh(float radius1, float radius2, float length, int slices, int stacks) { DX9Mesh mesh = DX9Mesh.CreateCylinder(GraphicsDirect3D9.Device, radius1, radius2, length, slices, stacks); return(new Direct3D9Mesh(mesh)); }
public Mesh CreateBoxMesh(float width, float height, float depth) { DX9Mesh mesh = DX9Mesh.CreateBox(GraphicsDirect3D9.Device, width, height, depth); return(new Direct3D9Mesh(mesh)); }
public Direct3D9Mesh(DXMesh mesh) { this.mesh = mesh; }
public void Insert(Model9 model, Entity entity, MetaModel metaModel, string metaName, SkinnedMesh skinnedMesh, SlimDX.Direct3D9.Mesh mesh, bool halfSkinned) { if (skinnedMesh != null) { RenderSkinnedMesh sm; if (!SkinnedMeshes.TryGetValue(skinnedMesh, out sm)) { SkinnedMeshes[skinnedMesh] = sm = new RenderSkinnedMesh(); } sm.Insert(model, entity, metaModel, metaName); } else if (mesh != null) { RenderMesh m; if (!Meshes.TryGetValue(mesh, out m)) { Meshes[mesh] = m = new RenderMesh(mesh.IndexBuffer, mesh.VertexBuffer); } m.Insert(model, entity, metaModel, metaName); } }