Ejemplo n.º 1
0
 private void Initialize()
 {
     this.Trixels       = new HashSet <TrixelEmplacement>();
     this.tangentFace   = FezMath.GetTangent(this.Orientation);
     this.bitangentFace = FezMath.GetBitangent(this.Orientation);
     this.tangentFaces  = new FaceOrientation[4]
     {
         this.tangentFace,
         this.bitangentFace,
         FezMath.GetOpposite(this.tangentFace),
         FezMath.GetOpposite(this.bitangentFace)
     };
     this.normal    = FezMath.AsVector(this.Orientation);
     this.Tangent   = FezMath.AsVector(this.tangentFace);
     this.Bitangent = FezMath.AsVector(this.bitangentFace);
 }
Ejemplo n.º 2
0
            private void BuildMesh()
            {
                Vector3 a     = (this.Volume.To - this.Volume.From) / 2f;
                float   num1  = a.Y * 2f;
                Mesh    mesh1 = new Mesh();
                Mesh    mesh2 = new Mesh();

                FaceOrientation[] faceOrientationArray = new FaceOrientation[4]
                {
                    FaceOrientation.Front,
                    FaceOrientation.Right,
                    FaceOrientation.Back,
                    FaceOrientation.Left
                };
                foreach (FaceOrientation faceOrientation in faceOrientationArray)
                {
                    Vector3 vector3_1 = FezMath.AsVector(FezMath.IsSide(FezMath.GetTangent(faceOrientation)) ? FezMath.GetTangent(faceOrientation) : FezMath.GetBitangent(faceOrientation));
                    Vector3 origin    = this.Center + FezMath.AsVector(faceOrientation) * a;
                    float   num2      = Math.Abs(FezMath.Dot(a, vector3_1)) * 2f;
                    Vector3 vector3_2 = origin + (a - new Vector3(0.5f)) * (-vector3_1 - Vector3.UnitY);
                    Vector3 vector3_3 = origin + (a - new Vector3(0.5f)) * (-vector3_1 + Vector3.UnitY);
                    for (int index = 0; (double)index < (double)num2; ++index)
                    {
                        Vector3 p = vector3_2 + (float)index * vector3_1;
                        if (!Enumerable.Any <Group>((IEnumerable <Group>)mesh1.Groups, (Func <Group, bool>)(g => FezMath.AlmostEqual(g.Position, p))))
                        {
                            mesh1.AddFace(Vector3.One * 2f, Vector3.Zero, faceOrientation, true).Position = p;
                        }
                        p = vector3_3 + (float)index * vector3_1;
                        if (!Enumerable.Any <Group>((IEnumerable <Group>)mesh1.Groups, (Func <Group, bool>)(g => FezMath.AlmostEqual(g.Position, p))))
                        {
                            mesh1.AddFace(Vector3.One * 2f, Vector3.Zero, faceOrientation, true).Position = p;
                        }
                    }
                    Vector3 vector3_4 = origin + (a - new Vector3(0.5f)) * (-vector3_1 - Vector3.UnitY);
                    Vector3 vector3_5 = origin + (a - new Vector3(0.5f)) * (vector3_1 - Vector3.UnitY);
                    for (int index = 0; (double)index < (double)num1; ++index)
                    {
                        Vector3 p = vector3_4 + (float)index * Vector3.UnitY;
                        if (!Enumerable.Any <Group>((IEnumerable <Group>)mesh1.Groups, (Func <Group, bool>)(g => FezMath.AlmostEqual(g.Position, p))))
                        {
                            mesh1.AddFace(Vector3.One * 2f, Vector3.Zero, faceOrientation, true).Position = p;
                        }
                        p = vector3_5 + (float)index * Vector3.UnitY;
                        if (!Enumerable.Any <Group>((IEnumerable <Group>)mesh1.Groups, (Func <Group, bool>)(g => FezMath.AlmostEqual(g.Position, p))))
                        {
                            mesh1.AddFace(Vector3.One * 2f, Vector3.Zero, faceOrientation, true).Position = p;
                        }
                    }
                    mesh2.AddFace(num2 * FezMath.Abs(vector3_1) + num1 * Vector3.UnitY, origin, faceOrientation, Color.White, true);
                }
                foreach (Group group in mesh1.Groups)
                {
                    group.TextureMatrix = (Dirtyable <Matrix?>) new Matrix?(new Matrix(0.5f, 0.0f, 0.0f, 0.0f, 0.0f, 0.5f, 0.0f, 0.0f, 0.5 > this.Host.random.NextDouble() ? 0.5f : 0.0f, 0.5 > this.Host.random.NextDouble() ? 0.5f : 0.0f, 1f, 0.0f, 0.0f, 0.0f, 0.0f, 1f));
                }
                mesh2.Collapse <VertexPositionNormalColor>();
                IndexedUserPrimitives <VertexPositionNormalColor> indexedUserPrimitives1 = mesh2.FirstGroup.Geometry as IndexedUserPrimitives <VertexPositionNormalColor>;

                mesh1.CollapseWithNormalTexture <FezVertexPositionNormalTexture>();
                IndexedUserPrimitives <FezVertexPositionNormalTexture> indexedUserPrimitives2 = mesh1.FirstGroup.Geometry as IndexedUserPrimitives <FezVertexPositionNormalTexture>;

                this.instanceIndex = this.Host.HolesBodyMesh.Groups.Count;
                this.Host.HolesBodyMesh.AddGroup().Geometry = (IIndexedPrimitiveCollection) new IndexedUserPrimitives <VertexPositionInstance>(Enumerable.ToArray <VertexPositionInstance>(Enumerable.Select <VertexPositionNormalColor, VertexPositionInstance>((IEnumerable <VertexPositionNormalColor>)indexedUserPrimitives1.Vertices, (Func <VertexPositionNormalColor, VertexPositionInstance>)(x => new VertexPositionInstance(x.Position)
                {
                    InstanceIndex = (float)this.instanceIndex
                }))), indexedUserPrimitives1.Indices, PrimitiveType.TriangleList);
                this.Host.HolesFringeMesh.AddGroup().Geometry = (IIndexedPrimitiveCollection) new IndexedUserPrimitives <VertexPositionTextureInstance>(Enumerable.ToArray <VertexPositionTextureInstance>(Enumerable.Select <FezVertexPositionNormalTexture, VertexPositionTextureInstance>((IEnumerable <FezVertexPositionNormalTexture>)indexedUserPrimitives2.Vertices, (Func <FezVertexPositionNormalTexture, VertexPositionTextureInstance>)(x => new VertexPositionTextureInstance(x.Position, x.TextureCoordinate)
                {
                    InstanceIndex = (float)this.instanceIndex
                }))), indexedUserPrimitives2.Indices, PrimitiveType.TriangleList);
            }