/// <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); } }
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()); }
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); }
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); }
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); }
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); }
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()); } } } }
/// <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); }
// 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); } } } } }
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); } } }
/// <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"); } }