hora para otra pregunta fuera de la pared. Estoy escribiendo un cargador MD2 para mi pequeño proyecto de motor 3D. En mi idioma antiguo (C), podría definir una estructura y luego leer() desde un archivo abierto directamente en la estructura. Tengo una estructura para mantener la información del encabezado del archivo MD2, de la siguiente manera:Lectura de bytes en una estructura en 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;
}
En mi código lector, me gustaría hacer algo como:
// 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));
Sé que esto no es correcto , ya que rompe la seguridad de tipo algo extrañamente, pero se obtiene la idea de lo que quiero lograr. Podría hacer esto con llamadas separadas a reader.ReadInt32(), pero tengo curiosidad de saber si hay alguna manera de hacer que esto funcione de la manera que quiero utilizando las llamadas normales de la biblioteca.
He analizado un poco el método Marshal.Copy(), pero parece ser para pasar de la memoria administrada a la no administrada, que no es lo que estoy haciendo aquí.
¿Alguna sugerencia?
Parece que alguien puede vencer a la misma: http://gpwiki.org/index.php/C_sharp:MD2_loader_in_CSharp – Jess