public static MyEffect CreateHaloForBuilding(Game game, CBuilding building, BuildingHaloStyle style, BuildingHaloColor color)
        {
            IHaloController haloController;
            MyHalo halo;

            switch (style)
            {
                case BuildingHaloStyle.Style01:
                    BuildingHaloController_Style01 haloController1;
                    haloController1 = new BuildingHaloController_Style01();
                    haloController1.Scale = s;
                    haloController1.MaxHeight = building.Radius;
                    haloController = haloController1;
                    break;
                case BuildingHaloStyle.Style02:
                default:
                    BuildingHaloController_Style02 haloController2;
                    haloController2 = new BuildingHaloController_Style02();
                    haloController2.Scale = s;
                    haloController = haloController2;
                    break;
            }

            switch (color)
            {
                case BuildingHaloColor.Blue:
                default:
                    halo = new HaloBlue(game, haloController);
                    halo.Initialize();
                    halo.Radius = building.Radius;
                    halo.Position = building.Position;
                    break;
                case BuildingHaloColor.Green:
                    halo = new HaloGreen(game, haloController);
                    halo.Initialize();
                    halo.Radius = building.Radius;
                    halo.Position = building.Position;
                    break;
                case BuildingHaloColor.Yellow:
                    halo = new HaloYellow(game, haloController);
                    halo.Initialize();
                    halo.Radius = building.Radius;
                    halo.Position = building.Position;
                    break;
                case BuildingHaloColor.White:
                    halo = new HaloWhite(game, haloController);
                    halo.Initialize();
                    halo.Radius = building.Radius;
                    halo.Position = building.Position;
                    break;
                case BuildingHaloColor.Violet:
                    halo = new HaloViolet(game, haloController);
                    halo.Initialize();
                    halo.Radius = building.Radius;
                    halo.Position = building.Position;
                    break;
            }

            return halo;
        }
 private void LoadObject(int idx)
 {
     if (flag)
     {
         building = provider.GetBuildingAt(idx);
     }
     else
     {
         character = provider.GetCharacterAt(idx);
     }
 }
        /// <summary>
        /// LoadContent will be called once per game and is the place to load
        /// all of your content.
        /// </summary>
        protected override void LoadContent()
        {
            // Create a new SpriteBatch, which can be used to draw textures.
            spriteBatch = new SpriteBatch(GraphicsDevice);

            // TODO: use this.Content to load your game content here

            // Hoc doi tuong
            string[] ObjectName;
            int[] CardSizeWidth;
            int[] CardSizeHeight;
            ReadObjectFromXML("ObjectConfig.xml", out nObject, out ObjectName, out CardSizeWidth, out CardSizeHeight);

            LearnObject(ObjectName, CardSizeWidth, CardSizeHeight, nObject);
            SetCalibrationInfoFromXML("camera.xml");
            StreamReader sr = new StreamReader("Input.txt");
            sVideoPath = sr.ReadLine();
            sr.Close();

            //cap = new Capture(sVideoPath);
            cap = new Capture(0);

            building = provider.GetBuildingAt(0);
            character = provider.GetCharacterAt(0);
        }
        /// <summary>
        /// This is called when the game should draw itself.
        /// </summary>
        /// <param name="gameTime">Provides a snapshot of timing values.</param>
        protected override void Draw(GameTime gameTime)
        {
            int nDetectedObject;
            int[] ObjectID = new int[nObject];
            int[] ObjectPosition = new int[nObject * 8];
            Image<Bgr, byte> frame = cap.QueryFrame();

            if (frame != null)
            {
                IntPtr framePtr = frame.Ptr;
                // Detect
                DetectObject(frame, out nDetectedObject, ObjectID, ObjectPosition, 0);
                spriteBatch.Begin();

                Texture2D texture = ConvertToTexture2D(GraphicsDevice, frame);
                spriteBatch.Draw(texture, new Vector2(0, 0), Color.White);
                //buildings[0].Draw(device, gameTime, Matrix.Identity, m);

                spriteBatch.End();

                // Projection MAtrix
                if (nDetectedObject > 0)
                {
                    for (int idx = 0; idx < nDetectedObject; idx++)
                    {
                        float m11, m12, m13, m14, m21, m22, m23, m24, m31, m32, m33, m34;
                        int[] pos = new int[8];
                        for (int i = 0; i < 8; i++)
                            pos[i] = ObjectPosition[idx * 8 + i];
                        GetProjectionMatrix(ObjectID[idx], pos, out m11, out m12, out m13, out m14, out m21, out m22, out m23, out m24, out m31, out m32, out m33, out m34);
                        Matrix m = new Matrix();
                        m.M11 = m11; m.M12 = m21; m.M13 = m31; m.M14 = 0;
                        m.M21 = m12; m.M22 = m22; m.M23 = m32; m.M24 = 0;
                        m.M31 = m13; m.M32 = m23; m.M33 = m33; m.M34 = 0;
                        m.M41 = m14; m.M42 = m24; m.M43 = m34; m.M44 = 1;

                        //if (ObjectID[idx] == 0)
                        provider.SetActive(ObjectID[idx]);
                        building = provider.GetBuildingAt(0);
                        //building.Update(device, gameTime);
                        //if (f == 1)
                        //{
                            //AddEffect(1, 0, flag);
                        //}
                        building.Draw(device, gameTime, m, graphics.PreferredBackBufferWidth, graphics.PreferredBackBufferHeight);

                        //building.Update(device, gameTime);
                        //provider.GetBuildingAt(ObjectID[idx]).Draw(device, gameTime, m, graphics.PreferredBackBufferWidth, graphics.PreferredBackBufferHeight);
                        //character = provider.GetCharacterAt(idx);
                        //character.Update(device, gameTime);
                        //character.Draw(device, gameTime, m, graphics.PreferredBackBufferWidth, graphics.PreferredBackBufferHeight);

                        //provider.GetBuildingAt(0).Draw(device, gameTime, m, 800, 600);
                        //else
                        //    buildings[2].Draw(device, gameTime, Matrix.Identity, m);
                    }
                    f = 0;
                }
            }

               /* GraphicsDevice.Clear(Color.Black);
            int resolutionWidth = Window.ClientBounds.Width;
            int resolutionHeight = Window.ClientBounds.Height;
            Vector3 cameraPos = new Vector3(0.0f, 2f, 8f);
            Matrix associateMatrix = Matrix.CreateLookAt(cameraPos, Vector3.Zero, Vector3.Up) *
                Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4, (float)resolutionWidth / (float)resolutionHeight, 0.01f, 100f);
            // TODO: Add your drawing code here
            DrawObject(gameTime, associateMatrix);*/
            base.Draw(gameTime);
        }
 public void SetActive(int index)
 {
     xbuilding = lstBuildings[index];
 }
        private void LoadBuildings(ContentManager content)
        {
            #region Declaration
            string[] strModelAssetPaths =
            {
                @"Models\Buildings\mainbuilding\mainbuilding",
                @"Models\Buildings\japan_consulate\japan_consulate",
                @"Models\Buildings\japan_dojo\japan_dojo",
                @"Models\Buildings\japan_towncenter\japan_towncenter",
                @"Models\Buildings\porcelain_tower\porcelain_tower",
                @"Models\Buildings\summer_palace\summer_palace",
                @"Models\Buildings\japan_monastery\japan_monastery"

                //@"Models\Buildings\summer_palace\summer_palace",
                //@"Models\Buildings\japan_monastery\japan_monastery",

                /*@"Models\Buildings\mainbuilding\mainbuilding",
                @"Models\Buildings\china_circlebuilding\china_circlebuilding",
                @"Models\Buildings\japan_circlebuilding\japan_circlebuilding",
                @"Models\Buildings\tallbuilding\tallbuilding",
                @"Models\Buildings\japan_boatbuilding\japan_boatbuilding",

                @"Models\Buildings\china_boatbuilding\china_boatbuilding",
                @"Models\Buildings\china_waterbuilding\china_waterbuilding",
                @"Models\Buildings\japan_waterbuilding\japan_waterbuilding",
                @"Models\Buildings\topbuilding\topbuilding",
                @"Models\Buildings\imperial_palace\imperial_palace"*/
            };
            #endregion Declaration

            //building0 = new CBuilding();
            //building0.InitializeObject(device, content, strModelAssetPaths[0], Vector3.Zero, buildingScale, 0);

            //building1 = new CBuilding();
            //building1.InitializeObject(device, content, strModelAssetPaths[1], Vector3.Zero, buildingScale, 0);

            //xbuilding = building1;

            for (int i = 0; i < strModelAssetPaths.Length; i++)
            {
                CBuilding building = new CBuilding();

                building.InitializeObject(device, content, strModelAssetPaths[i], Vector3.Zero, buildingScale, 0);

                lstBuildings.Add(building);
            }

            xbuilding = lstBuildings[0];
        }