예제 #1
0
        /// <summary>
        /// configures a transformed matrix to the vertex component data
        /// using the sprite object.
        /// </summary>
        /// <param name="vertexData">target vertex component data</param>
        /// <param name="obj">source sprite object</param>
        /// <param name="startIndex">start index of the vertex component data</param>
        /// <param name="transformMatrix">transformed matrix</param>
        /// <param name="space">3D render space</param>
        private static void SetBufferPosition(
            ref VertexPositionColorTexture[] vertexData, Sprite3DObject obj,
            int startIndex, Matrix transformMatrix, RenderingSpace space)
        {
            float cx = obj.Width * 0.5f;
            float cy = obj.Height * 0.5f;

            vertexData[startIndex + 0].Position = new Vector3(-cx, +cy, 0.0f);
            vertexData[startIndex + 1].Position = new Vector3(+cx, +cy, 0.0f);
            vertexData[startIndex + 2].Position = new Vector3(-cx, -cy, 0.0f);
            vertexData[startIndex + 3].Position = new Vector3(+cx, -cy, 0.0f);

            for (int i = 0; i < 4; i++)
            {
                int arrayIndex = startIndex + i;

                Vector3.TransformNormal(ref vertexData[arrayIndex].Position,
                                        ref transformMatrix,
                                        out vertexData[arrayIndex].Position);

                vertexData[arrayIndex].Position += obj.Center;

                if (space == RenderingSpace.Screen)
                {
                    vertexData[arrayIndex].Position =
                        HelperMath.Make2DCoord(vertexData[arrayIndex].Position);
                }
            }
        }
예제 #2
0
        /// <summary>
        /// create point sprite objects using the texture.
        /// </summary>
        /// <param name="count">sprite object count</param>
        /// <param name="fileName">texture file name</param>
        /// <param name="space">3D render space</param>
        /// <param name="alwaysUpdate"></param>
        public void Create(int count, string fileName,
                           RenderingSpace space, bool alwaysUpdate)
        {
            //  load a texture.
            GameResourceTexture2D resource =
                FrameworkCore.ResourceManager.LoadTexture(fileName);

            Create(count, resource.Texture2D, space, alwaysUpdate);
        }
예제 #3
0
        /// <summary>
        /// create 3D sprite objects using the texture.
        /// </summary>
        /// <param name="count">sprite object count</param>
        /// <param name="texture">texture resource</param>
        /// <param name="space">3D render space</param>
        /// <param name="bAlwaysUpdate"></param>
        public void Create(int count, Texture2D texture, RenderingSpace space,
                           bool bAlwaysUpdate)
        {
            this.count          = count;
            this.renderingSpace = space;
            alwaysUpdate        = bAlwaysUpdate;

            for (int i = 0; i < count; i++)
            {
                spriteList.Add(new Sprite3DObject());
            }

            base.Create(count * vertexStride, count * indexStride, texture);
        }
예제 #4
0
        /// <summary>
        /// configures texture coordinates to the vertex component data
        /// using the sprite object.
        /// </summary>
        /// <param name="vertexData">target vertex component data</param>
        /// <param name="obj">source sprite object</param>
        /// <param name="startIndex">start index of the vertex component data</param>
        /// <param name="space">3D render space</param>
        private static void SetBufferTextureCoord(
            ref VertexPositionColorTexture[] vertexData, PointSpriteObject obj,
            int startIndex, RenderingSpace space)
        {
            float u1 = 0.0f, v1 = 0.0f, u2 = 0.0f, v2 = 0.0f;

            // Differ Y axis of the 3D and 2D
            bool flipY = (space == RenderingSpace.Screen ? !obj.FlipY : obj.FlipY);

            if (obj.FlipX)
            {
                if (flipY)
                {
                    u1 = obj.MaxUV.X;
                    v1 = obj.MaxUV.Y;
                    u2 = obj.MinUV.X;
                    v2 = obj.MinUV.Y;
                }
                else
                {
                    u1 = obj.MaxUV.X;
                    v1 = obj.MinUV.Y;
                    u2 = obj.MinUV.X;
                    v2 = obj.MaxUV.Y;
                }
            }
            else
            {
                if (flipY)
                {
                    u1 = obj.MinUV.X;
                    v1 = obj.MaxUV.Y;
                    u2 = obj.MaxUV.X;
                    v2 = obj.MinUV.Y;
                }
                else
                {
                    u1 = obj.MinUV.X;
                    v1 = obj.MinUV.Y;
                    u2 = obj.MaxUV.X;
                    v2 = obj.MaxUV.Y;
                }
            }

            vertexData[startIndex + 0].TextureCoordinate = new Vector2(u1, v1);
            vertexData[startIndex + 1].TextureCoordinate = new Vector2(u2, v1);
            vertexData[startIndex + 2].TextureCoordinate = new Vector2(u2, v2);
            vertexData[startIndex + 3].TextureCoordinate = new Vector2(u1, v2);
        }
예제 #5
0
        /// <summary>
        /// create point sprite objects using the texture.
        /// </summary>
        /// <param name="count">sprite object count</param>
        /// <param name="texture">rexture resource</param>
        /// <param name="space">3D render space</param>
        /// <param name="alwaysUpdate"></param>
        public void Create(int count, Texture2D texture,
                           RenderingSpace space, bool alwaysUpdate)
        {
            this.count        = count;
            this.space        = space;
            this.alwaysUpdate = alwaysUpdate;

            // create sprite objects.
            for (int i = 0; i < count; i++)
            {
                pointSpriteList.Add(new PointSpriteObject());
            }

            base.Create(this.count * vertexStride, this.count * indexStride, texture);
        }
예제 #6
0
        /// <summary>
        /// create billboard objects using the texture.
        /// </summary>
        /// <param name="count">billboard object count</param>
        /// <param name="texture">texture resource</param>
        /// <param name="renderingSpace">3D render space</param>
        /// <param name="alwaysUpdate"></param>
        public void Create(int count, Texture2D texture, RenderingSpace renderingSpace,
                           bool alwaysUpdate)
        {
            this.objectCount    = count;
            this.renderingSpace = renderingSpace;
            this.alwaysUpdate   = alwaysUpdate;

            // create billboard objects.
            for (int i = 0; i < count; i++)
            {
                BillboardObject obj = new BillboardObject();
                obj.AddUpdateType(BillboardObject.UpdateTypes.Enable);

                billboardList.Add(obj);
            }

            base.Create(count * vertexStride, count * indexStride, texture);
        }
예제 #7
0
        /// <summary>
        /// configures texture coordinates to the vertex component data
        /// using the billboard object.
        /// </summary>
        /// <param name="vertexData">target vertex component data</param>
        /// <param name="obj">source billboard object</param>
        /// <param name="startIndex">start index of the vertex component data</param>
        /// <param name="renderingSpace">3D render space</param>
        private static void SetBufferTextureCoord(
            ref VertexPositionColorTexture[] vertexData, BillboardObject obj,
            int startIndex, RenderingSpace renderingSpace)
        {
            float u1 = 0.0f, v1 = 0.0f, u2 = 0.0f, v2 = 0.0f;

            u1 = obj.MinUV.X;
            v1 = obj.MinUV.Y;
            u2 = obj.MaxUV.X;
            v2 = obj.MaxUV.Y;

            if (renderingSpace == RenderingSpace.Screen)
            {
                float swap = v1;
                v1 = v2;
                v2 = swap;
            }

            vertexData[startIndex + 0].TextureCoordinate = new Vector2(u1, v2);
            vertexData[startIndex + 1].TextureCoordinate = new Vector2(u1, v1);
            vertexData[startIndex + 2].TextureCoordinate = new Vector2(u2, v2);
            vertexData[startIndex + 3].TextureCoordinate = new Vector2(u2, v1);
        }
예제 #8
0
        /// <summary>
        /// configures texture coordinates to the vertex component data 
        /// using the billboard object.
        /// </summary>
        /// <param name="vertexData">target vertex component data</param>
        /// <param name="obj">source billboard object</param>
        /// <param name="startIndex">start index of the vertex component data</param>
        /// <param name="renderingSpace">3D render space</param>
        private static void SetBufferTextureCoord(
            ref VertexPositionColorTexture[] vertexData, BillboardObject obj, 
            int startIndex, RenderingSpace renderingSpace)
        {
            float u1 = 0.0f, v1 = 0.0f, u2 = 0.0f, v2 = 0.0f;

            u1 = obj.MinUV.X;
            v1 = obj.MinUV.Y;
            u2 = obj.MaxUV.X;
            v2 = obj.MaxUV.Y;

            if (renderingSpace == RenderingSpace.Screen)
            {
                float swap = v1;
                v1 = v2;
                v2 = swap;
            }

            vertexData[startIndex + 0].TextureCoordinate = new Vector2(u1, v2);
            vertexData[startIndex + 1].TextureCoordinate = new Vector2(u1, v1);
            vertexData[startIndex + 2].TextureCoordinate = new Vector2(u2, v2);
            vertexData[startIndex + 3].TextureCoordinate = new Vector2(u2, v1);
        }
예제 #9
0
        /// <summary>
        /// create billboard objects using the texture.
        /// </summary>
        /// <param name="count">billboard object count</param>
        /// <param name="texture">texture resource</param>
        /// <param name="renderingSpace">3D render space</param>
        /// <param name="alwaysUpdate"></param>
        public void Create(int count, Texture2D texture, RenderingSpace renderingSpace, 
                            bool alwaysUpdate)
        {
            this.objectCount = count;
            this.renderingSpace = renderingSpace;
            this.alwaysUpdate = alwaysUpdate;

            // create billboard objects.
            for (int i = 0; i < count; i++)
            {
                BillboardObject obj = new BillboardObject();
                obj.AddUpdateType(BillboardObject.UpdateTypes.Enable);

                billboardList.Add(obj);
            }

            base.Create(count * vertexStride, count * indexStride, texture);
        }
예제 #10
0
        /// <summary>
        /// create billboard objects using the texture.
        /// </summary>
        /// <param name="count">billboard object count</param>
        /// <param name="fileName">texture file name</param>
        /// <param name="renderingSpace">3D render space</param>
        /// <param name="alwaysUpdate"></param>
        public void Create(int count, string fileName, RenderingSpace renderingSpace, 
                            bool alwaysUpdate)
        {
            //  load a texture.
            GameResourceTexture2D resource = 
                                FrameworkCore.ResourceManager.LoadTexture(fileName);

            Create(count, resource.Texture2D, renderingSpace, alwaysUpdate);
        }
예제 #11
0
        /// <summary>
        /// configures texture coordinates to the vertex component data
        /// using the sprite object.
        /// </summary>
        /// <param name="vertexData">target vertex component data</param>
        /// <param name="obj">source sprite object</param>
        /// <param name="startIndex">start index of the vertex component data</param>
        /// <param name="space">3D render space</param>
        private static void SetBufferTextureCoord(
            ref VertexPositionColorTexture[] vertexData, Sprite3DObject obj, 
            int startIndex, RenderingSpace space)
        {
            float u1 = 0.0f, v1 = 0.0f, u2 = 0.0f, v2 = 0.0f;

            // Differ Y axis of the 3D and 2D
            bool flipY = (space == RenderingSpace.Screen ? !obj.FlipY : obj.FlipY);

            if (obj.FlipX)
            {
                if (flipY)
                {
                    u1 = obj.MaxUV.X;
                    v1 = obj.MaxUV.Y;
                    u2 = obj.MinUV.X;
                    v2 = obj.MinUV.Y;
                }
                else
                {
                    u1 = obj.MaxUV.X;
                    v1 = obj.MinUV.Y;
                    u2 = obj.MinUV.X;
                    v2 = obj.MaxUV.Y;
                }
            }
            else
            {
                if (flipY)
                {
                    u1 = obj.MinUV.X;
                    v1 = obj.MaxUV.Y;
                    u2 = obj.MaxUV.X;
                    v2 = obj.MinUV.Y;
                }
                else
                {
                    u1 = obj.MinUV.X;
                    v1 = obj.MinUV.Y;
                    u2 = obj.MaxUV.X;
                    v2 = obj.MaxUV.Y;
                }
            }

            vertexData[startIndex + 0].TextureCoordinate = new Vector2(u1, v1);
            vertexData[startIndex + 1].TextureCoordinate = new Vector2(u2, v1);
            vertexData[startIndex + 2].TextureCoordinate = new Vector2(u1, v2);
            vertexData[startIndex + 3].TextureCoordinate = new Vector2(u2, v2);
        }
예제 #12
0
        /// <summary>
        /// configures a transformed matrix to the vertex component data
        /// using the sprite object.
        /// </summary>
        /// <param name="vertexData">target vertex component data</param>
        /// <param name="obj">source sprite object</param>
        /// <param name="startIndex">start index of the vertex component data</param>
        /// <param name="transformMatrix">transformed matrix</param>
        /// <param name="space">3D render space</param>
        private static void SetBufferPosition(
            ref VertexPositionColorTexture[] vertexData, Sprite3DObject obj, 
            int startIndex, Matrix transformMatrix, RenderingSpace space)
        {
            float cx = obj.Width * 0.5f;
            float cy = obj.Height * 0.5f;

            vertexData[startIndex + 0].Position = new Vector3(-cx, +cy, 0.0f);
            vertexData[startIndex + 1].Position = new Vector3(+cx, +cy, 0.0f);
            vertexData[startIndex + 2].Position = new Vector3(-cx, -cy, 0.0f);
            vertexData[startIndex + 3].Position = new Vector3(+cx, -cy, 0.0f);

            for (int i = 0; i < 4; i++)
            {            
                int arrayIndex = startIndex + i;

                Vector3.TransformNormal(ref vertexData[arrayIndex].Position, 
                                        ref transformMatrix,
                                        out vertexData[arrayIndex].Position);

                vertexData[arrayIndex].Position += obj.Center;

                if (space == RenderingSpace.Screen)
                    vertexData[arrayIndex].Position = 
                                HelperMath.Make2DCoord(vertexData[arrayIndex].Position);
            }
        }
예제 #13
0
        /// <summary>
        /// create 3D sprite objects using the texture.
        /// </summary>
        /// <param name="count">sprite object count</param>
        /// <param name="texture">texture resource</param>
        /// <param name="space">3D render space</param>
        /// <param name="bAlwaysUpdate"></param>
        public void Create(int count, Texture2D texture, RenderingSpace space, 
                           bool bAlwaysUpdate)
        {
            this.count = count;
            this.renderingSpace = space;
            alwaysUpdate = bAlwaysUpdate;

            for (int i = 0; i < count; i++)
                spriteList.Add(new Sprite3DObject());

            base.Create(count * vertexStride, count * indexStride, texture);
        }