/// <summary>
        /// get necessary data for layers in a region
        /// </summary>
        /// <param name="layers">requested layers, namely agent, primitive and terrain</param>
        public void initialize(string[] layers)
        {
            m_hasAgentLyr   = false;
            m_hasObjLyr     = false;
            m_hasTerrainLyr = false;
            for (int i = 0; i < layers.Length; i++)
            {
                switch (layers[i])
                {
                case "agent":
                    m_agentLyr = new AgentLayer(m_scene);
                    m_agentLyr.initialize();
                    m_hasAgentLyr = true;
                    break;

                case "primitive":
                    m_objLyr = new ObjectLayer(m_scene);
                    m_objLyr.initialize();
                    m_hasObjLyr = true;
                    break;

                case "terrain":
                    m_terrainLyr = new TerrainLayer(m_scene);
                    m_terrainLyr.initialize();
                    m_hasTerrainLyr = true;
                    break;

                default:
                    break;
                }
            }
        }