Wie kann ich den Bereich zwischen zwei Bezier-Kurven mit dear imgui füllen?Wie füllt man den Bereich zwischen zwei Bezier-Kurven mit Hilfe von Lieber Imgui
zog ich die Kurven, die die ImDrawList API verwenden, wie folgt aus:
ImVec2 p0(10, 100); ImVec2 c1(110, 50); ImVec2 p1(210, 100);
ImVec2 q0(10, 200); ImVec2 c2(110, 100); ImVec2 q1(210, 200);
auto col = IM_COL32(0,255,255, 255);
ImDrawList* draw_list = ImGui::GetWindowDrawList();
draw_list->AddBezierCurve(p0, c1, c1, p1, col, 1.0f);
draw_list->AddBezierCurve(q0, c2, c2, q1, col, 1.0f);
// I can close the curves, visually, with these lines
draw_list->AddLine(p0, q0, col, 1.0f);
draw_list->AddLine(p1, q1, col, 1.0f);
Edit:
ich die Stateful-API verwendet, um den Pfad zu zeichnen ich wollte, und dann rief ich eine Funktion, diesen Weg zu füllen . Hier ist der Code:
draw_list->PathLineTo(p0);
draw_list->PathBezierCurveTo(c1, c1, p1);
draw_list->PathLineTo(q1);
draw_list->PathBezierCurveTo(c2, c2, q0);
draw_list->PathFillConvex(col);
Aber es ist etwas falsch, wie man sehen kann:
Die richtige Geometrie in weiß gezeichnet.
Vielen Dank. Auf der Suche nach dem Scanline-Algorithmus habe ich eine Implementierung mit imgui gefunden: https://github.com/ocornut/imgui/issues/760. – user3762200