Exemple #1
0
    /// <summary>
    /// 检查对象是否在分割面的前方(是否在视角前方)
    /// </summary>
    /// <param name="mSplitFace">分割面</param>
    /// <param name="boundingBox">每个对象包裹的箱子</param>
    /// <returns></returns>
    public bool RenderBoundsOnRender(Transform mSplitFace, RenderBoundingBox boundingBox)
    {
        Vector3 p000 = boundingBox.p000;
        Vector3 p001 = boundingBox.p001;
        Vector3 p010 = boundingBox.p010;
        Vector3 p011 = boundingBox.p011;
        Vector3 p100 = boundingBox.p100;
        Vector3 p101 = boundingBox.p101;
        Vector3 p110 = boundingBox.p110;
        Vector3 p111 = boundingBox.p111;

        Plane plane = new Plane(mSplitFace.forward, mSplitFace.position);

        bool bp000 = plane.GetSide(p000);
        bool bp001 = plane.GetSide(p001);
        bool bp010 = plane.GetSide(p010);
        bool bp011 = plane.GetSide(p011);
        bool bp100 = plane.GetSide(p100);
        bool bp101 = plane.GetSide(p101);
        bool bp110 = plane.GetSide(p110);
        bool bp111 = plane.GetSide(p111);

        if (!bp000 && !bp001 && !bp010 && !bp011 && !bp100 && !bp101 && !bp110 && !bp111)
        {
            return(false);
        }
        else
        {
            return(true);
        }
    }
Exemple #2
0
        public override void ConstructRenderable()
        {
            RenderBoundingBox Renderable = RenderableFactory.BuildBoundingBox(Bounds, WorldTransform);

            RenderAdapter = new Rendering.Core.RenderableAdapter();
            RenderAdapter.InitAdaptor(Renderable, this);
        }
    // Use this for initialization
    void Start()
    {
        m_RenderBoundingBox = GetComponent <RenderBoundingBox>();
        output = m_Output;

        StartCoroutine(DoLerping());
        StartCoroutine(UpdateUI());
    }
Exemple #4
0
        public static RenderBoundingBox BuildBoundingBox(BoundingBox BBox, Matrix WorldTransform)
        {
            RenderBoundingBox RenderBox = new RenderBoundingBox();

            RenderBox.Init(BBox);
            RenderBox.SetTransform(WorldTransform);
            return(RenderBox);
        }
        public override void ConstructRenderable()
        {
            BoundingBox       TempBox    = new BoundingBox(new Vector3(0.5f), new Vector3(0.5f));
            RenderBoundingBox Renderable = RenderableFactory.BuildBoundingBox(TempBox, WorldTransform);

            RenderAdapter = new Rendering.Core.RenderableAdapter();
            RenderAdapter.InitAdaptor(Renderable, this);
        }
Exemple #6
0
        public override void ConstructRenderable(PrimitiveBatch BBoxBatcher)
        {
            base.ConstructRenderable(BBoxBatcher);

            RenderBoundingBox navigationBox = new RenderBoundingBox();

            navigationBox.SetColour(System.Drawing.Color.White);
            navigationBox.Init(new BoundingBox(new Vector3(-0.5f), new Vector3(0.5f)));
            navigationBox.SetTransform(Matrix4x4.CreateTranslation(Position));

            BBoxBatcher.AddObject(RefID, navigationBox);
        }
Exemple #7
0
        public override void ConstructRenderable(PrimitiveBatch BBoxBatcher)
        {
            // NB: Base class is not called here as it may result in PrimitiveBatch.AddObject conflict

            RenderBoundingBox navigationBox = new RenderBoundingBox();

            navigationBox.SetColour(System.Drawing.Color.Blue);
            navigationBox.Init(new BoundingBox(new Vector3(-0.5f), new Vector3(0.5f)));
            navigationBox.SetTransform(Matrix4x4.CreateTranslation(Unk2));

            BBoxBatcher.AddObject(RefID, navigationBox);
        }
Exemple #8
0
        public override void ConstructRenderable(PrimitiveBatch BBoxBatcher)
        {
            base.ConstructRenderable(BBoxBatcher);

            RenderBoundingBox navigationBox = new RenderBoundingBox();

            navigationBox.SetColour(System.Drawing.Color.Yellow);

            BoundingBox BBox = new BoundingBox(Minimum, Maximum);

            //Matrix4x4 RotationMatrix = MatrixExtensions.ConvertFromDirection(Direction);
            //RotationMatrix.TranslationVector = Position;

            navigationBox.Init(BBox);
            navigationBox.SetTransform(Matrix4x4.CreateTranslation(Position));

            BBoxBatcher.AddObject(RefID, navigationBox);
        }
Exemple #9
0
        public SpatialGrid(TranslokatorLoader translokator)
        {
            bIsReady   = true;
            gridBounds = translokator.Bounds;
            width      = translokator.Grids[0].Width;
            height     = translokator.Grids[0].Height;
            cellSize   = new Vector2(gridBounds.Width / width, gridBounds.Height / height);
            cells      = new SpatialCell[width * height];
            origin     = gridBounds.Minimum;

            var index = 0;

            for (int i = 0; i < width; i++)
            {
                for (int x = 0; x < height; x++)
                {
                    var extents = new BoundingBox();
                    extents.Minimum = new Vector3(origin.X + cellSize.X * x, origin.Y + cellSize.Y * i, 10.0f);
                    extents.Maximum = new Vector3(origin.X + cellSize.X * (x + 1), origin.Y + cellSize.Y * (i + 1), 10.0f);
                    cells[index++]  = new SpatialCell(extents);
                }
            }

            for (int i = 0; i != translokator.ObjectGroups.Length; i++)
            {
                ObjectGroup objectGroup = translokator.ObjectGroups[i];

                for (int x = 0; x != objectGroup.NumObjects; x++)
                {
                    ResourceTypes.Translokator.Object obj = objectGroup.Objects[x];

                    for (int y = 0; y != obj.NumInstances; y++)
                    {
                        Instance          instance = obj.Instances[y];
                        var               cell     = GetCell(instance.Position);
                        RenderBoundingBox box      = new RenderBoundingBox();
                        box.SetTransform(Matrix.Translation(instance.Position));
                        box.Init(new BoundingBox(-Vector3.One, Vector3.One));
                        cells[cell].AddAsset(box, StringHelpers.GetNewRefID());
                    }
                }
            }
        }
Exemple #10
0
    /// <summary>
    /// 获取一个静态对象的渲染包裹箱
    /// </summary>
    /// <param name="renderer"></param>
    /// <returns></returns>
    public RenderBoundingBox GetRenderBoundingBox(Renderer renderer)
    {
        RenderBoundingBox boundingBox = new RenderBoundingBox();

        boundingBox.prenderer = renderer;
        // A sphere that fully encloses the bounding box.
        Vector3 center   = renderer.bounds.center - renderer.transform.position;
        Vector3 halfsize = renderer.bounds.size * 0.5f;

        boundingBox.p000 = renderer.transform.localToWorldMatrix.MultiplyPoint3x4(center + new Vector3(-halfsize.x, -halfsize.y, -halfsize.z));
        boundingBox.p001 = renderer.transform.localToWorldMatrix.MultiplyPoint3x4(center + new Vector3(-halfsize.x, -halfsize.y, halfsize.z));
        boundingBox.p010 = renderer.transform.localToWorldMatrix.MultiplyPoint3x4(center + new Vector3(-halfsize.x, halfsize.y, -halfsize.z));
        boundingBox.p011 = renderer.transform.localToWorldMatrix.MultiplyPoint3x4(center + new Vector3(-halfsize.x, halfsize.y, halfsize.z));
        boundingBox.p100 = renderer.transform.localToWorldMatrix.MultiplyPoint3x4(center + new Vector3(halfsize.x, -halfsize.y, -halfsize.z));
        boundingBox.p101 = renderer.transform.localToWorldMatrix.MultiplyPoint3x4(center + new Vector3(halfsize.x, -halfsize.y, halfsize.z));
        boundingBox.p110 = renderer.transform.localToWorldMatrix.MultiplyPoint3x4(center + new Vector3(halfsize.x, halfsize.y, -halfsize.z));
        boundingBox.p111 = renderer.transform.localToWorldMatrix.MultiplyPoint3x4(center + new Vector3(halfsize.x, halfsize.y, halfsize.z));
        return(boundingBox);
    }
Exemple #11
0
    // Update is called once per frame
    void Update()
    {
        if (mRenderBoundingBoxs.Count > 0 && SplitFace)
        {
            for (int i = 0; i < mRenderBoundingBoxs.Count; i++)
            {
                RenderBoundingBox boundingBox = mRenderBoundingBoxs[i];
                bool EnableFlag = RenderBoundsOnRender(SplitFace, boundingBox);

                if (boundingBox.prenderer)
                {
                    if (boundingBox.prenderer.gameObject)
                    {
                        boundingBox.prenderer.gameObject.SetActive(EnableFlag);
                    }
                }
            }
        }
    }
Exemple #12
0
        public void Initialise(ID3D11Device device, ID3D11DeviceContext deviceContext)
        {
            if (bIsReady)
            {
                boundingBox = new RenderBoundingBox();
                boundingBox.SetColour(System.Drawing.Color.Red, true);
                boundingBox.Init(gridBounds);
                boundingBox.InitBuffers(device, deviceContext);

                cellBoundingBox = new RenderBoundingBox();
                cellBoundingBox.SetColour(System.Drawing.Color.Blue, true);
                cellBoundingBox.Init(cellBounds);
                cellBoundingBox.InitBuffers(device, deviceContext);

                foreach (var cell in cells)
                {
                    cell.Initialise(device, deviceContext);
                }
            }
        }
Exemple #13
0
    /// <summary>
    /// 查询渲染集合下的所有参与渲染的对象并初始化 渲染箱子列表
    /// </summary>
    public void InitializedRenderBoundingBox()
    {
        if (RenderAssets)
        {
            Renderer[] renderers = RenderAssets.GetComponentsInChildren <Renderer>();
            mRenderers.Clear();
            mRenderers.AddRange(renderers);


            mRenderBoundingBoxs.Clear();

            for (int i = 0; i < renderers.Length; i++)
            {
                RenderBoundingBox boundingBox = GetRenderBoundingBox(renderers[i]);
                mRenderBoundingBoxs.Add(boundingBox);
            }
        }
        else
        {
            Debug.LogError("RenderAssets is null");
        }
    }