protected override void CreateGeometry() { var vertices = RectangleComposer.Create(1f, 1f); VertexTransformer.Rotate(vertices, new Vector3(MathHelper.PiOver2, 0, 0)); Geometry.AddVertices(vertices); }
private static EntityGeometry Billboard(EntityData data, Texture2D propTexture) { ITextureDefintion texture = DefaultTextureDefinition.Instance; var textures = data.Textures; if (textures != null && textures.Length > 0) { texture = new TextureRectangle(textures[0], propTexture); } var size = data.Size2; var vertices = RectangleComposer.Create(1f, 1f, texture); VertexTransformer.Rotate(vertices, new Vector3(data.billboardTilt, 0, 0)); VertexTransformer.Scale(vertices, new Vector3(size.X, size.Y, 1f)); if (size.Y != 1f) { VertexTransformer.Offset(vertices, new Vector3(0, (size.Y - 1f) / 2f, 0)); } var geometry = new EntityGeometry { Vertices = vertices, Heights = new[] { size.Y, size.Y, size.Y, size.Y }, Size = new Vector3(size.X, size.Y, size.X) }; return(geometry); }
private static EntityGeometry HouseInside(EntityData data, Texture2D propTexture) { ITextureDefintion texture = DefaultTextureDefinition.Instance; var textures = data.Textures; if (textures != null && textures.Length > 0) { texture = new TextureRectangle(textures[0], propTexture); } var size = data.Size3; var allVertices = new List <VertexPositionNormalTexture>(); // back { var vertices = RectangleComposer.Create(1f, 1f, texture); VertexTransformer.Scale(vertices, new Vector3(size.X, size.Y, 1f)); VertexTransformer.Rotate(vertices, new Vector3(MathHelper.PiOver2, 0, 0)); VertexTransformer.Offset(vertices, new Vector3(0, 0, -size.Z / 2f)); allVertices.AddRange(vertices); } // left { var vertices = RectangleComposer.Create(1f, 1f, texture); VertexTransformer.Scale(vertices, new Vector3(size.Z, size.Y, 1f)); VertexTransformer.Rotate(vertices, new Vector3(MathHelper.PiOver2, MathHelper.PiOver2, 0)); VertexTransformer.Offset(vertices, new Vector3(-size.X / 2f, 0, 0)); allVertices.AddRange(vertices); } // right { var vertices = RectangleComposer.Create(1f, 1f, texture); VertexTransformer.Scale(vertices, new Vector3(size.Z, size.Y, 1f)); VertexTransformer.Rotate(vertices, new Vector3(MathHelper.PiOver2, -MathHelper.PiOver2, 0)); VertexTransformer.Offset(vertices, new Vector3(size.X / 2f, 0, 0)); allVertices.AddRange(vertices); } // floor { var vertices = RectangleComposer.Create(1f, 1f, texture); VertexTransformer.Scale(vertices, new Vector3(size.X, 1f, size.Z)); VertexTransformer.Offset(vertices, new Vector3(0, -0.499f, 0)); // do not put 0.5 to not interfer with floors allVertices.AddRange(vertices); } var geometry = new EntityGeometry { Vertices = allVertices.ToArray(), Heights = new[] { size.Y, size.Y, size.Y, size.Y }, Size = new Vector3(size.X, size.Y, size.Z) }; return(geometry); }
public static VertexInput[] Create(float radius, float height, int edgeCount, IGeometryTextureDefintion sideTexture, IGeometryTextureDefintion endTexture) { var vertices = new List <VertexInput>(); var sides = TubeComposer.Create(radius, height, edgeCount, sideTexture); var end1 = CircleComposer.Create(radius, edgeCount, endTexture); var end2 = CircleComposer.Create(radius, edgeCount, endTexture); VertexTransformer.Rotate(end1, new Vector3(0, 0, MathHelper.PiOver2)); VertexTransformer.Offset(end1, new Vector3(height / 2f, 0, 0)); VertexTransformer.Rotate(end2, new Vector3(0, 0, MathHelper.PiOver2)); VertexTransformer.Offset(end2, new Vector3(-height / 2f, 0, 0)); vertices.AddRange(sides); vertices.AddRange(end1); vertices.AddRange(end2); return(vertices.ToArray()); }
private static EntityGeometry Wall(EntityData data, Texture2D propTexture) { var size = data.Size3; ITextureDefintion texture = DefaultTextureDefinition.Instance; var textures = data.Textures; if (textures != null && textures.Length > 0) { var rect = textures[0]; if (data.tileTexture) { rect.Width = (int)(rect.Width * size.X); rect.Height = (int)(rect.Height * size.Y); } texture = new TextureRectangle(rect, propTexture); } else { if (data.tileTexture) { texture = new TextureRectangle(0, 0, size.X, size.Y); } } var vertices = RectangleComposer.Create(size.X, size.Y, texture); VertexTransformer.Rotate(vertices, new Vector3(MathHelper.PiOver2, 0, 0)); VertexTransformer.Offset(vertices, new Vector3(0, 0, 0.5f)); var geometry = new EntityGeometry { Vertices = vertices, Heights = new[] { size.Y, size.Y, size.Y, size.Y }, Size = new Vector3(size.X, size.Y, size.Z) }; return(geometry); }