CeresEngine 0.2.0
A game development framework
Loading...
Searching...
No Matches
SpherifyMesh.hpp
Go to the documentation of this file.
1//
2// CeresEngine - A game development framework
3//
4// Created by Rogiel Sulzbach.
5// Copyright (c) 2018-2022 Rogiel Sulzbach. All rights reserved.
6//
7
8#pragma once
9
10#include "TransformMesh.hpp"
11
13
15 template<typename Mesh> class SpherifyMesh {
16 private:
19
20 public:
21 SpherifyMesh(Mesh mesh, double radius, double factor)
22 : mTransformMesh{std::move(mesh), [radius, factor](MeshVertex& value) {
23 value.position = mix(value.position, radius * normalize(value.position), factor);
24 value.normal = normalize(mix(value.normal, normalize(value.position), factor));
25 }} {}
26
27 using Triangles = typename Impl::Triangles;
28
29 [[nodiscard]] Triangles triangles() const noexcept { return mTransformMesh.triangles(); }
30
31 using Vertices = typename Impl::Vertices;
32
33 [[nodiscard]] Vertices vertices() const noexcept { return mTransformMesh.vertices(); }
34 };
35
36 template<typename Mesh> SpherifyMesh<Mesh> spherifyMesh(Mesh mesh, double radius, double factor) {
37 return SpherifyMesh<Mesh>{std::move(mesh), radius, factor};
38 }
39
40} // namespace CeresEngine::MeshGenerator
Definition MeshVertex.hpp:14
Projects vertices on a sphere centered at origin.
Definition SpherifyMesh.hpp:15
Vertices vertices() const noexcept
Definition SpherifyMesh.hpp:33
typename Impl::Triangles Triangles
Definition SpherifyMesh.hpp:27
SpherifyMesh(Mesh mesh, double radius, double factor)
Definition SpherifyMesh.hpp:21
Triangles triangles() const noexcept
Definition SpherifyMesh.hpp:29
Impl mTransformMesh
Definition SpherifyMesh.hpp:18
typename Impl::Vertices Vertices
Definition SpherifyMesh.hpp:31
Apply a mutator function to each vertex.
Definition TransformMesh.hpp:18
typename Impl::Triangles Triangles
Definition TransformMesh.hpp:50
A base class for all mesh implementations.
Definition Mesh.hpp:112
Definition AnyGenerator.hpp:12
SpherifyMesh< Mesh > spherifyMesh(Mesh mesh, double radius, double factor)
Definition SpherifyMesh.hpp:36
auto move(Vector3 position)
Moves a entity to the given position.
Definition Helpers.hpp:22
constexpr size_t hash(const T &v)
Generates a hash for the provided type.
Definition Hash.hpp:25
Definition Span.hpp:668