Esempio n. 1
0
        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;
        }