Beispiel #1
0
        public Triangle GetTriangle(Prisim Plane)
        {
            Vector3 A      = Vertices[Plane.VertexIndex];
            Vector3 CrossA = Vector3.Cross(Normals[Plane.NormalAIndex], Normals[Plane.DirectionIndex]);
            Vector3 CrossB = Vector3.Cross(Normals[Plane.NormalBIndex], Normals[Plane.DirectionIndex]);
            Vector3 B      = A + CrossB * (Plane.Length / Vector3.Dot(CrossB, Normals[Plane.NormalCIndex]));
            Vector3 C      = A + CrossA * (Plane.Length / Vector3.Dot(CrossA, Normals[Plane.NormalCIndex]));

            return(new Triangle(A, B, C));
        }
Beispiel #2
0
        public void ReadKCL(string fileName)
        {
            using (var reader = new StreamReader(File.OpenRead(fileName)))
            {
                while (!reader.EndOfStream)
                {
                    string line = reader.ReadLine();

                    if (line.Contains("mPosData"))
                    {
                        reader.ReadLine();//Array
                        uint numVertex = GetValueUint(reader.ReadLine());

                        for (int i = 0; i < numVertex; i++)
                        {
                            reader.ReadLine();                       //Index value
                            reader.ReadLine();                       //Vector
                            float X = GetValue32(reader.ReadLine()); //X
                            float Y = GetValue32(reader.ReadLine()); //Y
                            float Z = GetValue32(reader.ReadLine()); //Z
                            Vertices.Add(new Vector3(X, Y, Z));
                        }
                    }
                    if (line.Contains("mNrmData"))
                    {
                        reader.ReadLine();//Array
                        uint numVertex = GetValueUint(reader.ReadLine());

                        for (int i = 0; i < numVertex; i++)
                        {
                            reader.ReadLine();                       //Index value
                            reader.ReadLine();                       //Vector
                            float X = GetValue32(reader.ReadLine()); //X
                            float Y = GetValue32(reader.ReadLine()); //Y
                            float Z = GetValue32(reader.ReadLine()); //Z
                            Normals.Add(new Vector3(X, Y, Z));
                        }
                    }
                    if (line.Contains("mPrismData"))
                    {
                        reader.ReadLine();//Array
                        uint numPrisims = GetValueUint(reader.ReadLine());
                        uint faceIndex  = 0;
                        for (int i = 0; i < numPrisims; i++)
                        {
                            reader.ReadLine(); //Index value
                            reader.ReadLine(); //data

                            Prisim prisim = new Prisim();
                            prisim.Length         = GetValue32(reader.ReadLine());
                            prisim.VertexIndex    = GetValueUint16(reader.ReadLine());
                            prisim.DirectionIndex = GetValueUint16(reader.ReadLine());
                            prisim.NormalAIndex   = GetValueUint16(reader.ReadLine());
                            prisim.NormalBIndex   = GetValueUint16(reader.ReadLine());
                            prisim.NormalCIndex   = GetValueUint16(reader.ReadLine());
                            prisim.CollisionType  = GetValueUint16(reader.ReadLine());
                            prisim.TriangleIndex  = GetValueUint(reader.ReadLine());
                            Prisims.Add(prisim);

                            Faces.Add(faceIndex);
                            Faces.Add(faceIndex + 1);
                            Faces.Add(faceIndex + 2);

                            faceIndex += 3;
                        }
                    }
                }
            }
        }