示例#1
0
        public AIMesh(Stream stream)
        {
            buffer = new BinaryReader(stream);
            for (int i = 0; i < AIMESH_TEXTURE_SIZE; i++) // For every scanline for the triangle rendering
            {
                scanlineLowest[i] = new ScanLine {
                    u = 1e10f, v = 1e10f, x = 1e10f, y = 1e10f, z = 1e10f
                };
                scanlineHighest[i] = new ScanLine {
                    u = -1e10f, v = -1e10f, x = -1e10f, y = -1e10f, z = -1e10f
                };
            }
            heightMap = new float[AIMESH_TEXTURE_SIZE * AIMESH_TEXTURE_SIZE]; // Shows occupied or not
            xMap      = new float[AIMESH_TEXTURE_SIZE * AIMESH_TEXTURE_SIZE]; // Shows x
            yMap      = new float[AIMESH_TEXTURE_SIZE * AIMESH_TEXTURE_SIZE]; // Shows y

            fileStream                = new __AIMESHFILE();
            fileStream.magic          = buffer.ReadChars(8);
            fileStream.version        = buffer.ReadInt32();
            fileStream.triangle_count = buffer.ReadInt32();
            fileStream.zero           = new int[] { buffer.ReadInt32(), buffer.ReadInt32() };

            for (var i = 0; i < fileStream.triangle_count; i++)
            {
                var triangle = new Triangle();
                for (var j = 0; j < 3; j++)
                {
                    triangle.Face.v1[j] = buffer.ReadSingle();
                }
                for (var j = 0; j < 3; j++)
                {
                    triangle.Face.v2[j] = buffer.ReadSingle();
                }
                for (var j = 0; j < 3; j++)
                {
                    triangle.Face.v3[j] = buffer.ReadSingle();
                }
                triangle.unk1 = buffer.ReadInt16();
                triangle.unk2 = buffer.ReadInt16();
                triangle.triangle_reference = buffer.ReadInt16();

                fileStream.triangles[i] = triangle;
            }
            outputMesh(AIMESH_TEXTURE_SIZE, AIMESH_TEXTURE_SIZE);

            ////writeFile(AIMESH_TEXTURE_SIZE, AIMESH_TEXTURE_SIZE);

            loaded = true;
        }
示例#2
0
        public AIMesh(Stream stream)
        {
            buffer = new BinaryReader(stream);
            for (int i = 0; i < AIMESH_TEXTURE_SIZE; i++) // For every scanline for the triangle rendering
            {
                scanlineLowest[i] = new ScanLine { u = 1e10f, v = 1e10f, x = 1e10f, y = 1e10f, z = 1e10f };
                scanlineHighest[i] = new ScanLine { u = -1e10f, v = -1e10f, x = -1e10f, y = -1e10f, z = -1e10f };
            }
            heightMap = new float[AIMESH_TEXTURE_SIZE * AIMESH_TEXTURE_SIZE]; // Shows occupied or not
            xMap = new float[AIMESH_TEXTURE_SIZE * AIMESH_TEXTURE_SIZE]; // Shows x
            yMap = new float[AIMESH_TEXTURE_SIZE * AIMESH_TEXTURE_SIZE]; // Shows y

            fileStream = new __AIMESHFILE();
            fileStream.magic = buffer.ReadChars(8);
            fileStream.version = buffer.ReadInt32();
            fileStream.triangle_count = buffer.ReadInt32();
            fileStream.zero = new int[] { buffer.ReadInt32(), buffer.ReadInt32() };

            for (var i = 0; i < fileStream.triangle_count; i++)
            {
                var triangle = new Triangle();
                for (var j = 0; j < 3; j++)
                    triangle.Face.v1[j] = buffer.ReadSingle();
                for (var j = 0; j < 3; j++)
                    triangle.Face.v2[j] = buffer.ReadSingle();
                for (var j = 0; j < 3; j++)
                    triangle.Face.v3[j] = buffer.ReadSingle();
                triangle.unk1 = buffer.ReadInt16();
                triangle.unk2 = buffer.ReadInt16();
                triangle.triangle_reference = buffer.ReadInt16();

                fileStream.triangles[i] = triangle;
            }
            outputMesh(AIMESH_TEXTURE_SIZE, AIMESH_TEXTURE_SIZE);

            ////writeFile(AIMESH_TEXTURE_SIZE, AIMESH_TEXTURE_SIZE);

            loaded = true;
        }