Beispiel #1
0
        public static void addHermiteNormals(AbstractHermiteGrid grid, float cellSize, LineManager3DLines lines)
        {
            grid.ForEachGridPoint(p =>
            {
                var sign = grid.GetSign(p);
                var dirs = new[] { new Point3(1, 0, 0), new Point3(0, 1, 0), new Point3(0, 0, 1) };


                foreach (var dir in dirs)
                {
                    if (sign == grid.GetSign(p + dir))
                    {
                        continue;
                    }

                    //lines.AddLine(vertPos, end, Color.Black.dx());

                    var edge = grid.GetEdgeId(p, p + dir);

                    var edgeStart = grid.GetEdgeOffsets(edge)[0] + p;
                    var edgeEnd   = grid.GetEdgeOffsets(edge)[1] + p;

                    var normal = grid.GetEdgeNormal(p, edge);
                    var pos    = grid.GetEdgeIntersectionCubeLocal(p, edge);

                    pos = (p + pos) * cellSize;
                    lines.AddLine(pos, pos + normal * 0.4f * cellSize, Color.Blue);
                    lines.AddLine(edgeStart.ToVector3() * cellSize, edgeEnd.ToVector3() * cellSize, Color.LightBlue);

                    lines.AddCenteredBox(pos, 0.02f, Color.Red);
                }
            });
        }
        public void Render()
        {
            if (!Enabled)
            {
                return;
            }

            lineManager.ClearAllLines();

            var data = physXScene.GetDebugRenderable();


            if (data.PointCount > 0)
            {
                DebugPoint[] points = data.GetDebugPoints();

                for (int x = 0; x < data.LineCount; x++)
                {
                    lineManager.AddCenteredBox(points[x].Point.dx(), 0.01f, Int32ToColor(points[x].Color).dx());
                }
            }

            if (data.LineCount > 0)
            {
                DebugLine[] lines = data.GetDebugLines();

                for (int x = 0; x < data.LineCount; x++)
                {
                    DebugLine line = lines[x];

                    Color4 color4 = Int32ToColor(line.Color).dx();
                    color4.Alpha = 255; // Fix alpha
                    lineManager.AddLine(line.Point0.dx(), line.Point1.dx(), color4);
                }
            }

            if (data.TriangleCount > 0)
            {
                DebugTriangle[] triangles = data.GetDebugTriangles();

                for (int x = 0; x < data.TriangleCount; x++)
                {
                    DebugTriangle triangle = triangles[x];

                    lineManager.AddTriangle(triangle.Point0.dx(), triangle.Point1.dx(), triangle.Point2.dx(), Int32ToColor(triangle.Color).dx());
                }
            }

            game.LineManager3D.Render(lineManager, game.Camera);
        }
Beispiel #3
0
        public static void addFaceNormals(AbstractHermiteGrid grid, float cellSize, LineManager3DLines lines)
        {
            var vertices = new List <Vector3>();
            var indices  = new List <int>();
            var algo     = new DualContouringAlgorithm();

            algo.GenerateSurface(vertices, indices, grid);

            var builder = new DualContouringMeshBuilder();

            var triangleNormals = builder.generateTriangleNormals(indices, vertices);

            for (int i = 0; i < indices.Count; i += 3)
            {
                var v1   = vertices[indices[i]];
                var v2   = vertices[indices[i + 1]];
                var v3   = vertices[indices[i + 2]];
                var mean = (v1 + v2 + v3) / 3f;
                lines.AddCenteredBox(mean * cellSize, 0.05f, Color.DarkCyan);
                lines.AddLine(mean * cellSize, (mean + triangleNormals[i / 3] * 0.5f) * cellSize, Color.Cyan);
            }
        }