internal Engine_Mesh(Engine_MeshInfo _obj) { #region //Get Instance of DirectX m_d3d = Engine_Renderer.Instance; #endregion #region //Set Variables m_vertexCount = _obj.vertices.Count(); m_vertexStride = SharpDX.Utilities.SizeOf <Engine_Vertex>(); m_indexCount = _obj.indices.Count(); m_indexStride = sizeof(int); #endregion #region //Create VertexBuffer unsafe { fixed(Engine_Vertex *p = _obj.vertices.ToArray()) //Array { IntPtr ptr = (IntPtr)p; m_vertexBuffer = new D3D11.Buffer( m_d3d.m_device, ptr, new D3D11.BufferDescription( m_vertexCount * m_vertexStride, //ByteWidth D3D11.BindFlags.VertexBuffer, D3D11.ResourceUsage.Default)); } } #endregion #region //Create IndexBuffer unsafe { fixed(ushort *p = _obj.indices.ToArray()) { IntPtr ptr = (IntPtr)p; m_indexBuffer = new D3D11.Buffer( m_d3d.m_device, ptr, new D3D11.BufferDescription( m_indexCount * m_indexStride, D3D11.BindFlags.IndexBuffer, D3D11.ResourceUsage.Default)); } } #endregion }
internal static Engine_MeshInfo LoadFilePro(string _fileName) { var a = new Assimp.AssimpContext(); var s = a.ImportFile(_fileName); Engine_MeshInfo obj = new Engine_MeshInfo(); obj.vertices = new List <Engine_Vertex>(); obj.indices = new List <ushort>(); foreach (var mesh in s.Meshes) { for (int i = 0; i < mesh.VertexCount; i++) { obj.vertices.Add(new Engine_Vertex( mesh.Vertices[i].X, mesh.Vertices[i].Y, mesh.Vertices[i].Z, mesh.TextureCoordinateChannels[0][i].X, mesh.TextureCoordinateChannels[0][i].Y, mesh.Normals[i].X, mesh.Normals[i].Y, mesh.Normals[i].Z)); } foreach (var item in mesh.Faces) { var rangeIndices = new ushort[] { (ushort)(item.Indices[0]), (ushort)(item.Indices[1]), (ushort)(item.Indices[2]) }; obj.indices.AddRange(rangeIndices); if (item.IndexCount == 4) { rangeIndices = new ushort[] { (ushort)(item.Indices[0]), (ushort)(item.Indices[2]), (ushort)(item.Indices[3]) }; obj.indices.AddRange(rangeIndices); } } } return(obj); }