コード例 #1
0
        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);
        }
コード例 #2
0
        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;
        }
コード例 #3
0
        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));
        }
コード例 #4
0
        public Mesh CreateBoxMesh(float width, float height, float depth)
        {
            DX9Mesh mesh = DX9Mesh.CreateBox(GraphicsDirect3D9.Device, width, height, depth);

            return(new Direct3D9Mesh(mesh));
        }
コード例 #5
0
 public Direct3D9Mesh(DXMesh mesh)
 {
     this.mesh = mesh;
 }
コード例 #6
0
 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);
     }
 }
コード例 #7
0
ファイル: Direct3D9Mesh.cs プロジェクト: CHiiLD/net-toolkit
 public Direct3D9Mesh(DXMesh mesh)
 {
     this.mesh = mesh;
 }