42 for (
int i = 0;
i <= 40;
i++) {
44 Scalar x = a * pow(abs(cos(t)), 2 / n);
45 Scalar y = b * pow(abs(sin(t)), 2 / n);
46 points.emplace_back(
x * radius_,
y * radius_);
49 static constexpr Point reflection[4] = {{1, 1}, {-1, 1}, {-1, -1}, {1, -1}};
54 std::vector<Point> geometry;
55 geometry.reserve(1 + 4 *
points.size());
56 geometry.push_back(center_);
57 for (
auto i = 0u;
i <
points.size();
i++) {
58 geometry.push_back(center_ + (reflection[0] *
points[
i]));
60 for (
auto i = 0u;
i <
points.size();
i++) {
61 geometry.push_back(center_ +
64 for (
auto i = 0u;
i <
points.size();
i++) {
65 geometry.push_back(center_ + (reflection[2] *
points[
i]));
67 for (
auto i = 0u;
i <
points.size();
i++) {
68 geometry.push_back(center_ +
72 std::vector<uint16_t> indices;
73 indices.reserve(geometry.size() * 3);
74 for (
auto i = 2u;
i < geometry.size();
i++) {
76 indices.push_back(
i - 1);
82 return GeometryResult{
86 .vertex_buffer = data_host_buffer.
Emplace(
87 geometry.data(), geometry.size() *
sizeof(
Point),
89 .index_buffer = indexes_host_buffer.Emplace(
90 indices.data(), indices.size() *
sizeof(uint16_t),
92 .vertex_count = indices.size(),
99std::optional<Rect> SuperellipseGeometry::GetCoverage(
102 Size(radius_ * 2, radius_ * 2));
106 const Rect& rect)
const {
HostBuffer & GetTransientsDataBuffer() const
Retrieve the current host buffer for transient storage of other non-index data.
HostBuffer & GetTransientsIndexesBuffer() const
Retrieve the current host buffer for transient storage of indexes used for indexed draws.
Matrix GetShaderTransform(const RenderPass &pass) const
BufferView Emplace(const BufferType &buffer, size_t alignment=0)
Emplace non-uniform data (like contiguous vertices) onto the host buffer.
Render passes encode render commands directed as one specific render target into an underlying comman...
bool IsAxisAlignedRect() const override
SuperellipseGeometry(const Point ¢er, Scalar radius, Scalar degree, Scalar alpha, Scalar beta)
bool CoversArea(const Matrix &transform, const Rect &rect) const override
Determines if this geometry, transformed by the given transform, will completely cover all surface ar...
~SuperellipseGeometry() override
A 4x4 matrix using column-major storage.
static constexpr TRect MakeOriginSize(const TPoint< Type > &origin, const TSize< Type > &size)
std::vector< Point > points