/// <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); } } }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); } }
/// <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); }