public BillboardObject(TagIdent bitmap, ICache destination) { var key = CacheKey.Create(destination); // dear god. Model = (TagReference) new ModelBlock( ); var modelBlock = ( ModelBlock )Model.Get(key); var block = ( BitmapBlock )bitmap.Get(key); var w = block.Bitmaps[0].Width * 0.5f; var h = block.Bitmaps[0].Height * 0.5f; var worldCoordinates = new[] { new Vector3(-w, -h, 0), new Vector3(-w, h, 0), new Vector3(w, -h, 0), new Vector3(w, h, 0) }; var textureCoordinates = new[] { new Vector3(0, 0, 0), new Vector3(0, 1, 0), new Vector3(1, 0, 0), new Vector3(1, 1, 0) }; var normals = new[] { new Vector3(0, 0, 1), new Vector3(0, 0, 1), new Vector3(0, 0, 1), new Vector3(0, 0, 1) }; var elements = new short[] { 0, 1, 2, 2, 1, 3 }; var mesh = new GeometryMesh { Parts = new List <GeometryPart>(new[] { new GeometryPart { Type = GlobalGeometryPartBlockNew.TypeEnum.OpaqueNonshadowing, Flags = GlobalGeometryPartBlockNew.Flags.OverrideTriangleList, NormalVectors = new List <Vector3>(normals), WorldCoordinates = new List <Vector3>(worldCoordinates), TextureCoordinates = new List <Vector3>(textureCoordinates), Elements = new List <short>(elements) } }) }; var renderModelBlock = mesh.Export( ); var shaderBlock = new MoonfishScreenSpaceShader(bitmap); renderModelBlock.Materials = new[] { new GlobalGeometryMaterialBlock { Shader = ( TagReference )shaderBlock } }; modelBlock.RenderModel = ( TagReference )renderModelBlock; }