コード例 #1
0
ファイル: Herbe.cs プロジェクト: lu1u/ClockScreensaverGL
        /// <summary>
        /// Constructeur
        /// </summary>
        /// <param name="NbSegments"></param>
        /// <param name="x"></param>
        /// <param name="y"></param>
        /// <param name="longueurSegment"></param>

        public Herbe(float x, float y, float longueurSegment, float raideur)
        {
            if (_pens == null)
            {
                InitPens();
            }
            _x                = x;
            _y                = y;
            _raideur          = raideur;
            _longueurSegments = new float[NbSegments];
            _anglesSegments   = new double[NbSegments];

            double courbureHerbe = DisplayedObject.FloatRandom((float)-Math.PI, (float)Math.PI) / 20.0;
            float  X             = x;
            float  Y             = y;
            double angle         = Math.PI;

            for (int i = 0; i < NbSegments; i++)
            {
                _longueurSegments[i] = longueurSegment;
                _anglesSegments[i]   = angle;
                longueurSegment     *= ratioSegments;
                angle += courbureHerbe;
            }
        }
コード例 #2
0
        public override void GetVertexData(List <VertexPositionNormalTexture> vertices, List <ushort> indices)
        {
            var     points = new List <Vector3>();
            Vector3 max;
            var     direction   = new Vector3();
            float   margin      = DisplayedObject.CollisionMargin - DisplayedObject.AllowedPenetration;
            float   angleChange = MathHelper.TwoPi / NumSamples;

            Vector3 centerPosition       = DisplayedObject.CenterPosition;
            Matrix  transposeOrientation = Matrix.Transpose(DisplayedObject.OrientationMatrix);

            for (int i = 1; i < NumSamples / 2 - 1; i++)
            {
                float phi    = MathHelper.PiOver2 - i * angleChange;
                var   sinPhi = (float)Math.Sin(phi);
                var   cosPhi = (float)Math.Cos(phi);
                for (int j = 0; j < NumSamples; j++)
                {
                    float theta = j * angleChange;
                    direction.X = (float)Math.Cos(theta) * cosPhi;
                    direction.Y = sinPhi;
                    direction.Z = (float)Math.Sin(theta) * cosPhi;

                    DisplayedObject.GetExtremePoint(ref direction, margin, out max);
                    points.Add(Vector3.TransformNormal(max - centerPosition, transposeOrientation));
                }
            }

            DisplayedObject.GetExtremePoint(ref Toolbox.UpVector, margin, out max);
            points.Add(Vector3.TransformNormal(max - centerPosition, transposeOrientation));
            DisplayedObject.GetExtremePoint(ref Toolbox.DownVector, margin, out max);
            points.Add(Vector3.TransformNormal(max - centerPosition, transposeOrientation));

            var hullTriangleVertices = new List <Vector3>();
            var hullTriangleIndices  = new List <int>();

            Toolbox.GetConvexHull(points, hullTriangleIndices, hullTriangleVertices);
            //The hull triangle vertices are used as a dummy to get the unnecessary hull vertices, which are cleared afterwards.
            hullTriangleVertices.Clear();
            foreach (int i in hullTriangleIndices)
            {
                hullTriangleVertices.Add(points[i]);
            }

            Vector3 normal;

            for (ushort i = 0; i < hullTriangleVertices.Count; i += 3)
            {
                normal = Vector3.Normalize(Vector3.Cross(hullTriangleVertices[i + 2] - hullTriangleVertices[i], hullTriangleVertices[i + 1] - hullTriangleVertices[i]));
                vertices.Add(new VertexPositionNormalTexture(hullTriangleVertices[i], normal, new Vector2(0, 0)));
                vertices.Add(new VertexPositionNormalTexture(hullTriangleVertices[i + 1], normal, new Vector2(1, 0)));
                vertices.Add(new VertexPositionNormalTexture(hullTriangleVertices[i + 2], normal, new Vector2(0, 1)));
                indices.Add(i);
                indices.Add((ushort)(i + 1));
                indices.Add((ushort)(i + 2));
            }
        }
コード例 #3
0
        public override void GetVertexData(List <VertexPositionNormalTexture> vertices, List <ushort> indices)
        {
            Vector3 normal;
            int     numColumns = DisplayedObject.Heights.GetLength(0);
            int     numRows    = DisplayedObject.Heights.GetLength(1);

            for (int i = 0; i < numColumns; i++)
            {
                for (int j = 0; j < numRows; j++)
                {
                    normal = DisplayedObject.GetNormal(i, j);
                    vertices.Add(new VertexPositionNormalTexture(
                                     new Vector3(i * DisplayedObject.GetSpacingX(), DisplayedObject.Heights[i, j], j * DisplayedObject.GetSpacingZ()),
                                     normal,
                                     new Vector2(i, j)));
                }
            }
            for (int i = 0; i < numColumns - 1; i++)
            {
                for (int j = 0; j < numRows - 1; j++)
                {
                    for (int k = DisplayedObject.QuadTriangles.Length - 1; k >= 0; k--)
                    {
                        switch (DisplayedObject.QuadTriangles[k])
                        {
                        case 0:
                            indices.Add((ushort)(numRows * j + i));
                            break;

                        case 1:
                            indices.Add((ushort)(numRows * j + i + 1));
                            break;

                        case 2:
                            indices.Add((ushort)(numRows * (j + 1) + i));
                            break;

                        case 3:
                            indices.Add((ushort)(numRows * (j + 1) + i + 1));
                            break;
                        }
                    }
                }
            }
        }
コード例 #4
0
        private async Task ReplyToUser(
            DisplayedObject displayedObject,
            Activity activity,
            ConnectorClient connector)
        {
            var reply = activity.CreateReply(displayedObject.DisplayInformation);

            reply.Attachments = new List <Attachment>
            {
                new Attachment
                {
                    ContentUrl  = Url.Content($"~/content/{displayedObject.ImageName}"),
                    ContentType = "image/png",
                    Name        = $"{displayedObject.ImageName}"
                }
            };
            await connector.Conversations.ReplyToActivityAsync(reply);
        }
コード例 #5
0
 public override void GetMeshData(List <VertexPositionNormalTexture> vertices, List <ushort> indices)
 {
     ModelDrawer.ShapeMeshGetters[DisplayedObject.GetType()](DisplayedObject, vertices, indices);
 }
コード例 #6
0
ファイル: DisplayTerrain.cs プロジェクト: 4669842/GameEngine
        public override void GetMeshData(List <VertexPositionNormalTexture> vertices, List <ushort> indices)
        {
            int          numColumns = DisplayedObject.Shape.Heights.GetLength(0);
            int          numRows    = DisplayedObject.Shape.Heights.GetLength(1);
            TerrainShape shape      = DisplayedObject.Shape;

            //The terrain can be transformed arbitrarily.  However, the collision against the triangles is always oriented such that the transformed local
            //up vector points in the same direction as the collidable surfaces.
            //To make sure the graphics match the terrain collision, try transforming the local space up direction into world space. Treat it as a normal- it requires an adjugate transpose, not a regular transformation.

            var normalTransform = Matrix3x3.AdjugateTranspose(DisplayedObject.WorldTransform.LinearTransform);

            var reverseWinding = BEPUutilities.Vector3.Dot(normalTransform.Up, DisplayedObject.WorldTransform.LinearTransform.Up) < 0;


            for (int j = 0; j < numRows; j++)
            {
                for (int i = 0; i < numColumns; i++)
                {
                    VertexPositionNormalTexture v;
                    BEPUutilities.Vector3       position, n;
                    DisplayedObject.GetPosition(i, j, out position);
                    shape.GetLocalNormal(i, j, out n);
                    Matrix3x3.Transform(ref n, ref normalTransform, out n);
                    n.Normalize();
                    MathConverter.Convert(ref position, out v.Position);
                    MathConverter.Convert(ref n, out v.Normal);


                    if (reverseWinding)
                    {
                        Vector3.Negate(ref v.Normal, out v.Normal);
                    }
                    v.TextureCoordinate = new Vector2(i, j);

                    vertices.Add(v);

                    if (i < numColumns - 1 && j < numRows - 1)
                    {
                        if (shape.QuadTriangleOrganization == QuadTriangleOrganization.BottomLeftUpperRight)
                        {
                            //v3 v4
                            //v1 v2

                            //v1 v2 v3
                            indices.Add((ushort)(numColumns * j + i));
                            if (reverseWinding)
                            {
                                indices.Add((ushort)(numColumns * (j + 1) + i));
                                indices.Add((ushort)(numColumns * j + i + 1));
                            }
                            else
                            {
                                indices.Add((ushort)(numColumns * j + i + 1));
                                indices.Add((ushort)(numColumns * (j + 1) + i));
                            }

                            //v2 v4 v3
                            indices.Add((ushort)(numColumns * j + i + 1));
                            if (reverseWinding)
                            {
                                indices.Add((ushort)(numColumns * (j + 1) + i));
                                indices.Add((ushort)(numColumns * (j + 1) + i + 1));
                            }
                            else
                            {
                                indices.Add((ushort)(numColumns * (j + 1) + i + 1));
                                indices.Add((ushort)(numColumns * (j + 1) + i));
                            }
                        }
                        else if (shape.QuadTriangleOrganization == QuadTriangleOrganization.BottomRightUpperLeft)
                        {
                            //v1 v2 v4
                            indices.Add((ushort)(numColumns * j + i));
                            if (reverseWinding)
                            {
                                indices.Add((ushort)(numColumns * (j + 1) + i + 1));
                                indices.Add((ushort)(numColumns * j + i + 1));
                            }
                            else
                            {
                                indices.Add((ushort)(numColumns * j + i + 1));
                                indices.Add((ushort)(numColumns * (j + 1) + i + 1));
                            }

                            //v1 v4 v3
                            indices.Add((ushort)(numColumns * j + i));
                            if (reverseWinding)
                            {
                                indices.Add((ushort)(numColumns * (j + 1) + i));
                                indices.Add((ushort)(numColumns * (j + 1) + i + 1));
                            }
                            else
                            {
                                indices.Add((ushort)(numColumns * (j + 1) + i + 1));
                                indices.Add((ushort)(numColumns * (j + 1) + i));
                            }
                        }
                    }
                }
            }
        }
コード例 #7
0
 public override void Update()
 {
     WorldTransform = Matrix.CreateTranslation(DisplayedObject.GetPosition());
 }
コード例 #8
0
ファイル: DisplayTerrain.cs プロジェクト: Indiefreaks/igf
        public override void GetMeshData(List <VertexPositionNormalTexture> vertices, List <ushort> indices)
        {
            int          numColumns = DisplayedObject.Shape.Heights.GetLength(0);
            int          numRows    = DisplayedObject.Shape.Heights.GetLength(1);
            TerrainShape shape      = DisplayedObject.Shape;

            //The terrain can be transformed arbitrarily.  However, the collision against the triangles is always oriented such that the transformed local
            //up vector points in the same direction as the collidable surfaces.
            //To make sure the graphics match the terrain collision, see if a triangle normal faces in the same direction as the local up vector.
            //If not, construct the graphics with reversed winding.
            Vector3 a, b, c;

            DisplayedObject.GetPosition(0, 0, out a);
            DisplayedObject.GetPosition(1, 0, out b);
            DisplayedObject.GetPosition(0, 1, out c);
            Vector3 normal    = Vector3.Cross(c - a, b - a);
            Vector3 terrainUp = new Vector3(DisplayedObject.WorldTransform.LinearTransform.M21, DisplayedObject.WorldTransform.LinearTransform.M22, DisplayedObject.WorldTransform.LinearTransform.M23);
            float   dot;

            Vector3.Dot(ref normal, ref terrainUp, out dot);
            bool reverseWinding = dot < 0;



            for (int j = 0; j < numRows; j++)
            {
                for (int i = 0; i < numColumns; i++)
                {
                    VertexPositionNormalTexture v;
                    DisplayedObject.GetPosition(i, j, out v.Position);
                    DisplayedObject.GetNormal(i, j, out v.Normal);
                    if (reverseWinding)
                    {
                        Vector3.Negate(ref v.Normal, out v.Normal);
                    }
                    v.TextureCoordinate = new Vector2(i, j);

                    vertices.Add(v);

                    if (i < numColumns - 1 && j < numRows - 1)
                    {
                        if (shape.QuadTriangleOrganization == QuadTriangleOrganization.BottomLeftUpperRight)
                        {
                            //v3 v4
                            //v1 v2

                            //v1 v2 v3
                            indices.Add((ushort)(numColumns * j + i));
                            if (reverseWinding)
                            {
                                indices.Add((ushort)(numColumns * (j + 1) + i));
                                indices.Add((ushort)(numColumns * j + i + 1));
                            }
                            else
                            {
                                indices.Add((ushort)(numColumns * j + i + 1));
                                indices.Add((ushort)(numColumns * (j + 1) + i));
                            }

                            //v2 v4 v3
                            indices.Add((ushort)(numColumns * j + i + 1));
                            if (reverseWinding)
                            {
                                indices.Add((ushort)(numColumns * (j + 1) + i));
                                indices.Add((ushort)(numColumns * (j + 1) + i + 1));
                            }
                            else
                            {
                                indices.Add((ushort)(numColumns * (j + 1) + i + 1));
                                indices.Add((ushort)(numColumns * (j + 1) + i));
                            }
                        }
                        else if (shape.QuadTriangleOrganization == QuadTriangleOrganization.BottomRightUpperLeft)
                        {
                            //v1 v2 v4
                            indices.Add((ushort)(numColumns * j + i));
                            if (reverseWinding)
                            {
                                indices.Add((ushort)(numColumns * (j + 1) + i + 1));
                                indices.Add((ushort)(numColumns * j + i + 1));
                            }
                            else
                            {
                                indices.Add((ushort)(numColumns * j + i + 1));
                                indices.Add((ushort)(numColumns * (j + 1) + i + 1));
                            }

                            //v1 v4 v3
                            indices.Add((ushort)(numColumns * j + i));
                            if (reverseWinding)
                            {
                                indices.Add((ushort)(numColumns * (j + 1) + i));
                                indices.Add((ushort)(numColumns * (j + 1) + i + 1));
                            }
                            else
                            {
                                indices.Add((ushort)(numColumns * (j + 1) + i + 1));
                                indices.Add((ushort)(numColumns * (j + 1) + i));
                            }
                        }
                    }
                }
            }
        }
コード例 #9
0
ファイル: HiddenObject.cs プロジェクト: dany1532/Social_Clues
 public void SetSlot(DisplayedObject slot)
 {
     displaySlot = slot;
 }