thời gian cho một câu hỏi khác ngoài tường. Tôi đang viết một trình tải MD2 cho dự án động cơ 3D nhỏ của tôi. Trong ngôn ngữ cũ của tôi (C) tôi có thể định nghĩa một cấu trúc và sau đó đọc() từ một tệp mở trực tiếp vào cấu trúc. Tôi có một cấu trúc tổ chức thông tin tiêu đề từ tập tin MD2, như sau:Đọc các byte thành một cấu trúc trong C#
[StructLayout(LayoutKind.Sequential)]
public struct MD2_Header
{
public int FourCC;
public int Version;
public int TextureWidth;
public int TextureHeight;
public int FrameSizeInBytes;
public int NbrTextures;
public int NbrVertices;
public int NbrTextureCoords;
public int NbrTriangles;
public int NbrOpenGLCmds;
public int NbrFrames;
public int TextureOffset;
public int TexCoordOffset;
public int TriangleOffset;
public int FrameOffset;
public int OpenGLCmdOffset;
public int EndOffset;
}
Trong mã độc giả của tôi, tôi muốn làm một cái gì đó như:
// Suck the MD2 header into a structure, it is 68 bytes long.
Classic.Util.MD2_Header md2hdr = new Classic.Util.MD2_Header();
md2hdr = reader.ReadBytes(sizeof(Classic.Util.MD2_Header));
Tôi nhận ra điều này là không đúng , vì nó phá vỡ an toàn loại hơi kỳ quặc, nhưng bạn có được ý tưởng về những gì tôi muốn thực hiện. Tôi có thể làm điều này với các cuộc gọi riêng biệt để đọc.ReadInt32(), nhưng tôi tò mò nếu có anyway để có được điều này để làm việc theo cách tôi muốn sử dụng các cuộc gọi thư viện bình thường.
Tôi đã xem xét một chút về phương thức Marshal.Copy(), nhưng có vẻ như là để đi giữa bộ nhớ được quản lý và không được quản lý, điều đó không thực sự là những gì tôi đang làm ở đây.
Mọi đề xuất?
Trông như ai đó đánh bại bạn với nó: http://gpwiki.org/index.php/C_sharp:MD2_loader_in_CSharp – Jess