internal static void DrawSceneDebug() { //if(true) //{ // //m_proj = MyEnvironment.Projection; // //m_vp = MyEnvironment.ViewProjection; // //m_invvp = MyEnvironment.InvViewProjection; // Vector2 groupDim = new Vector2(256, 256); // Vector2 tileScale = new Vector2(1600, 900) / (2 * groupDim); // Vector2 tileBias = tileScale - new Vector2(1, 1); // //Vector4 c1 = new Vector4(m_proj.M11 * tileScale.X, 0, tileBias.X, 0); // //Vector4 c2 = new Vector4(0, -m_proj.M22 * tileScale.Y, tileBias.Y, 0); // Vector4 c1 = new Vector4(m_proj.M11, 0, 0, 0); // Vector4 c2 = new Vector4(0, m_proj.M22, 0, 0); // Vector4 c4 = new Vector4(0, 0, 1, 0); // var frustumPlane0 = new VRageMath.Plane(c4 - c1); // var frustumPlane1 = new VRageMath.Plane(c4 + c1); // var frustumPlane2 = new VRageMath.Plane(c4 - c2); // var frustumPlane3 = new VRageMath.Plane(c4 + c2); // frustumPlane0.Normalize(); // frustumPlane1.Normalize(); // frustumPlane2.Normalize(); // frustumPlane3.Normalize(); // var ray0 = ComputeIntersectionLine(ref frustumPlane2, ref frustumPlane0); // var ray1 = ComputeIntersectionLine(ref frustumPlane1, ref frustumPlane2); // var ray2 = ComputeIntersectionLine(ref frustumPlane3, ref frustumPlane1); // var ray3 = ComputeIntersectionLine(ref frustumPlane0, ref frustumPlane3); // TransformRay(ref ray0, ref m_invvp); // TransformRay(ref ray1, ref m_invvp); // TransformRay(ref ray2, ref m_invvp); // TransformRay(ref ray3, ref m_invvp); // var batch = MyLinesRenderer.CreateBatch(); // batch.Add(ray0.Position, ray0.Position + ray0.Direction * 100, Color.Red); // batch.Add(ray1.Position, ray1.Position + ray1.Direction * 100, Color.Red); // batch.Add(ray2.Position, ray2.Position + ray2.Direction * 100, Color.Red); // batch.Add(ray3.Position, ray3.Position + ray3.Direction * 100, Color.Red); // batch.AddFrustum(new BoundingFrustum(m_vp), Color.Green); // batch.Commit(); //} // draw lights //if(false) //{ // MyLinesBatch batch = MyLinesRenderer.CreateBatch(); // foreach (var light in MyLight.Collection) // { // if (light.PointLightEnabled) // { // var position = light.GetPosition(); // //batch.AddBoundingBox(new BoundingBox(position - light.Pointlight.Range, position + light.Pointlight.Range), Color.Red); // batch.AddSphereRing(new BoundingSphere(position, light.Pointlight.Range), new Color(light.Pointlight.Color), Matrix.Identity); // batch.AddSphereRing(new BoundingSphere(position, light.Pointlight.Range), new Color(light.Pointlight.Color), Matrix.CreateRotationX((float)Math.PI * 0.5f)); // batch.AddSphereRing(new BoundingSphere(position, light.Pointlight.Range), new Color(light.Pointlight.Color), Matrix.CreateRotationZ((float)Math.PI * 0.5f)); // batch.AddSphereRing(new BoundingSphere(position, light.Pointlight.Radius), new Color(light.Pointlight.Color), Matrix.Identity); // batch.AddSphereRing(new BoundingSphere(position, light.Pointlight.Radius), new Color(light.Pointlight.Color), Matrix.CreateRotationX((float)Math.PI * 0.5f)); // } // } // batch.Commit(); //} // if (false) { MyLinesBatch batch = MyLinesRenderer.CreateBatch(); foreach (var r in MyComponentFactory <MyRenderableComponent> .GetAll()) { if (r.Owner.GetInstanceLod() != null) { batch.AddBoundingBox((BoundingBox)r.Owner.Aabb, Color.Blue); } } batch.Commit(); } if (false) { MyLinesBatch batch = MyLinesRenderer.CreateBatch(); //var radius = new [] { 0, 40, 72, 128, 256 , 512 }; var radius = new[] { 0, 50, 80, 128, 256, 512 }; float cellSize = 8; var colors = new[] { Color.Red, Color.Green, Color.Blue, Color.Yellow, Color.Pink, Color.MediumVioletRed }; var prevPositionG = Vector3.PositiveInfinity; for (int i = 0; i < 4; i++) { float levelCellSize = cellSize * (float)Math.Pow(2, i); var position = MyEnvironment.CameraPosition; //var position = Vector3.Zero; position.Y = 0; var positionG = position.Snap(levelCellSize * 2); float radiusMin = radius[i]; float radiusMax = radius[i + 1]; // naive var pmin = (positionG - radiusMax - levelCellSize * 2).Snap(levelCellSize * 2); var pmax = (positionG + radiusMax + levelCellSize * 2).Snap(levelCellSize * 2); //if(i==0) //{ // for (var x = pmin.X; x < pmax.X; x += levelCellSize) // { // for (var y = pmin.Y; y < pmax.Y; y += levelCellSize) // { // for (var z = pmin.Z; z < pmax.Z; z += levelCellSize) // { // var cell = new Vector3(x, y, z); // var rep = cell.Snap(levelCellSize * 2); // var inLevelGrid = (rep - positionG).Length() < radiusMax; // if(inLevelGrid) // { // batch.AddBoundingBox(new BoundingBox(cell, cell + levelCellSize), colors[i]); // } // } // } // } //} //else { for (var x = pmin.X; x < pmax.X; x += levelCellSize) { for (var z = pmin.Z; z < pmax.Z; z += levelCellSize) { var cell = new Vector3(x, positionG.Y, z); var rep = cell.Snap(levelCellSize * 2); var inPrevLevelGrid = (cell - prevPositionG).Length() < radiusMin; var inLevelGrid = (rep - positionG).Length() < radiusMax; if (inLevelGrid && !inPrevLevelGrid) { batch.AddBoundingBox(new BoundingBox(cell, cell + levelCellSize), colors[i]); } } } } prevPositionG = positionG; } batch.Commit(); } }