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 static void addQEFPoints(RawMeshData mesh, float scale, LineManager3DLines lineManager3DLines) { if (mesh.Positions.Length == 0) { return; } foreach (var p in mesh.Positions) { lineManager3DLines.AddCenteredBox(p * scale, 0.05f, Color.Orange); } }
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); }
public static void addHermiteVertices(AbstractHermiteGrid grid, float cellSize, LineManager3DLines lines) { grid.ForEachGridPoint(p => { var sign = grid.GetSign(p); if (GridHelper.OrthogonalDirections3D.All(dir => grid.GetSign(p + dir) == sign)) { return; } var vertPos = p.ToVector3() * cellSize; var color = sign ? Color.Green.dx() : Color.LightGray.dx(); //if (!sign) lines.AddCenteredBox(vertPos, cellSize * 0.1f, color); }); }
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); } }