Beispiel #1
0
        public static async System.Threading.Tasks.Task <GeomScene> CreateGeomScene(string name)
        {
            var xnd = await EngineNS.IO.XndHolder.LoadXND(name);

            if (xnd == null)
            {
                return(new GeomScene());
            }


            var attr = xnd.Node.FindAttrib("GeomSceneData");

            if (attr == null)
            {
                return(new GeomScene());
            }

            GeomScene scenegeo = new GeomScene();

            scenegeo.AgentDatas = new List <AgentBoxs>();
            attr.BeginRead();
            int count = 0;

            attr.Read(out count);
            for (int i = 0; i < count; i++)
            {
                AgentBoxs aboxs     = new AgentBoxs();
                int       datacount = 0;
                attr.Read(out aboxs.BVSize);
                attr.Read(out aboxs.Mat);
                attr.Read(out datacount);
                //List<Agent.GeoBox> data = new List<Agent.GeoBox>();
                for (int k = 0; k < datacount; k++)
                {
                    Agent.GeoBox geobox = new Agent.GeoBox();
                    attr.ReadMetaObject(geobox);

                    for (int j = 0; j < 6; j++)
                    {
                        int index;
                        attr.Read(out index);
                        geobox.Neighbors[j] = index;
                    }

                    aboxs.AgentData.Add(geobox);
                }
                scenegeo.AgentDatas.Add(aboxs);
            }
            attr.EndRead();
            xnd.Node.TryReleaseHolder();
            return(scenegeo);
        }
Beispiel #2
0
        public async System.Threading.Tasks.Task CreateRenderInfos(GamePlay.GWorld world)
        {
            //EngineNS.Bricks.GraphDrawer.GraphLines
            AgentBoxs ab = AgentDatas[0];

            Agent.GeoBox[]        ap    = ab.AgentData.ToArray();
            GamePlay.Actor.GActor actor = new GamePlay.Actor.GActor();
            //创建包围盒的每个点
            for (int i = 0; i < ap.Length; i++)
            {
                EngineNS.Bricks.GraphDrawer.GraphLines graph = new EngineNS.Bricks.GraphDrawer.GraphLines();
                var  boxgen  = new EngineNS.Bricks.GraphDrawer.McBoxGen();
                bool allface = ap[i].FaceType == face;
                boxgen.Interval = allface ? 0.05f : 0.1f;
                boxgen.Segement = allface ? 1.0f : 0.2f;

                Vector4 outv4;
                Vector3.Transform(ref ap[i].Box.Maximum, ref ab.Mat, out outv4);
                ap[i].Box.Maximum = new Vector3(outv4.X, outv4.Y, outv4.Z);
                Vector3.Transform(ref ap[i].Box.Minimum, ref ab.Mat, out outv4);
                ap[i].Box.Minimum = new Vector3(outv4.X, outv4.Y, outv4.Z);
                boxgen.SetBoundBox(ap[i].Box);

                graph.LinesGen = boxgen;
                var mtl = await CEngine.Instance.MaterialInstanceManager.GetMaterialInstanceAsync(
                    CEngine.Instance.RenderContext,
                    //蓝线就是六个面都通了
                    RName.GetRName(allface ? "editor/icon/icon_3D/material/physical_model.instmtl" : "editor/volume/mi_volume_octree.instmtl"));//rotator

                var init = await graph.Init(mtl, 0.0f);

                graph.GraphActor.Placement.Location = Vector3.Zero;
                graph.GraphActor.SpecialName        = ActorName;
                //world.AddActor(graph.GraphActor);
                //world.DefaultScene.AddActor(graph.GraphActor);
                actor.Children.Add(graph.GraphActor);
            }

            actor.SpecialName = "NavLineDebuger";
            world.AddActor(actor);
            world.DefaultScene.AddActor(actor);
        }