예제 #1
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);
        }
예제 #2
0
        private async System.Threading.Tasks.Task UpdateSelected(List <int> verts)
        {
            var rc = EngineNS.CEngine.Instance.RenderContext;

            foreach (var i in VertActors)
            {
                mPreviewSceneControl.RemoveActor(i);
            }
            VertActors.Clear();

            SelectedVerts = verts;

            if (verts.Count == 0)
            {
                return;
            }

            float bvl  = this.mPreviewActor.GetComponentMesh(null).MeshPrimitives.AABB.GetMaxSide() / 20;
            var   size = new EngineNS.Vector3(bvl, bvl, bvl);
            var   mtl0 = await EngineNS.CEngine.Instance.MaterialInstanceManager.GetMaterialInstanceAsync(rc, RName.GetRName("TitanDemo/greentest.instmtl"));

            var mtl1 = await EngineNS.CEngine.Instance.MaterialInstanceManager.GetMaterialInstanceAsync(rc, RName.GetRName("TitanDemo/redtest.instmtl"));

            foreach (var i in verts)
            {
                var curVert = mProgressMesh.Vertices[i];
                var center  = curVert.Position;

                var mesh = await EngineNS.CEngine.Instance.MeshManager.CreateMeshAsync(rc, RName.GetRName("editor/basemesh/box_center.gms"));

                var actor = EngineNS.GamePlay.Actor.GActor.NewMeshActorDirect(mesh);
                actor.Placement.Location = center;
                actor.Placement.Scale    = size;
                actor.GetComponentMesh(null).SetMaterialInstance(rc, 0, mtl0, null);

                VertActors.Add(actor);
                mPreviewSceneControl.AddDynamicActor(actor);

                foreach (var j in curVert.Linker.Vertices)
                {
                    curVert = mProgressMesh.Vertices[j];
                    center  = curVert.Position;

                    mesh = await EngineNS.CEngine.Instance.MeshManager.CreateMeshAsync(rc, RName.GetRName("editor/basemesh/box_center.gms"));

                    actor = EngineNS.GamePlay.Actor.GActor.NewMeshActorDirect(mesh);
                    actor.Placement.Location = center;
                    actor.Placement.Scale    = size;
                    actor.GetComponentMesh(null).SetMaterialInstance(rc, 0, mtl1, null);

                    VertActors.Add(actor);
                    mPreviewSceneControl.AddDynamicActor(actor);
                }
            }

            if (mGraphLines == null || mGraphLines.GraphActor == null)
            {
                mGraphLines                   = new EngineNS.Bricks.GraphDrawer.GraphLines();
                mGraphLines.LinesGen          = mLineGen;
                mGraphLines.LinesGen.Interval = 0f;
                mGraphLines.LinesGen.Segement = 100f;
                RName lineMaterial = RName.GetRName("editor/icon/icon_3d/material/line_df.instmtl");

                var curVert = mProgressMesh.Vertices[verts[0]];
                var start   = curVert.Position;
                mGraphLines.LinesGen.Start = start;

                var lnkVerts = curVert.Linker.Vertices;
                var end      = mProgressMesh.Vertices[lnkVerts[0]];

                mLineGen.SetVector3Points(new Vector3[] { start, end.Position });
                var mtl = await EngineNS.CEngine.Instance.MaterialInstanceManager.GetMaterialInstanceAsync(
                    EngineNS.CEngine.Instance.RenderContext,
                    lineMaterial);

                await mGraphLines.Init(mtl, 0);

                mGraphLines.UpdateGeomMesh(CEngine.Instance.RenderContext, 0);
                mGraphLines.GraphActor.Placement.Location = Vector3.Zero;

                mPreviewSceneControl.AddDynamicActor(mGraphLines.GraphActor);
            }
            else
            {
                mGraphLines.GraphActor.Visible = verts.Count > 0;

                var curVert = mProgressMesh.Vertices[verts[0]];
                var start   = curVert.Position;
                mGraphLines.LinesGen.Start = start;

                var            lnkVerts = curVert.Linker.Vertices;
                List <Vector3> points   = new List <Vector3>();
                foreach (var i in verts)
                {
                    curVert = mProgressMesh.Vertices[i];
                    start   = curVert.Position;
                    foreach (var j in curVert.Linker.Vertices)
                    {
                        curVert = mProgressMesh.Vertices[j];
                        var end = curVert.Position;

                        points.Add(start);
                        points.Add(end);
                    }
                }

                mLineGen.SetVector3Points(points.ToArray());
                mGraphLines.UpdateGeomMesh(CEngine.Instance.RenderContext, bvl * 0.1f);
            }
        }