2#include <boost/container/vector.hpp>
3#include <halp/controls.hpp>
4#include <halp/geometry.hpp>
5#include <halp/meta.hpp>
6#include <ossia/detail/pod_vector.hpp>
17using float_vec = boost::container::vector<float, ossia::pod_allocator<float>>;
21 halp::attribute_semantic semantic{};
22 halp::attribute_format format{};
30 int64_t pos_offset{}, texcoord_offset{}, normal_offset{}, color_offset{}, tangent_offset{};
37 int color_components{3};
40 std::vector<extra_attribute> extras;
43std::vector<mesh> ObjFromString(
44 std::string_view obj_data
45 , std::string_view mtl_data
48std::vector<mesh> ObjFromString(
49 std::string_view obj_data
52template <std::
size_t N>
53static void fromGL(
float (&from)[N],
auto& to)
55 memcpy(to.data(), from,
sizeof(
float[N]));
57template <std::
size_t N>
58static void toGL(
auto& from,
float (&to)[N])
60 memcpy(to, from.data(),
sizeof(
float[N]));
63inline void rebuild_transform(
auto& inputs,
auto& outputs)
67 if constexpr(
requires { inputs.position; })
69 auto& pos = inputs.position;
70 model.translate(pos.value.x, pos.value.y, pos.value.z);
73 if constexpr(
requires { inputs.rotation; })
75 auto& rot = inputs.rotation;
76 model.rotate(QQuaternion::fromEulerAngles(rot.value.x, rot.value.y, rot.value.z));
79 if constexpr(
requires { inputs.scale; })
81 auto& sc = inputs.scale;
82 model.scale(sc.value.x, sc.value.y, sc.value.z);
88 if constexpr(
requires {
89 outputs.geometry.transform;
90 outputs.geometry.dirty_transform;
93 toGL(model, outputs.geometry.transform);
94 outputs.geometry.dirty_transform =
true;
97struct PositionControl : halp::xyz_spinboxes_f32<"Position", halp::free_range_min<>>
99 void update(
auto& o) { rebuild_transform(o.inputs, o.outputs); }
102 : halp::xyz_spinboxes_f32<"Rotation", halp::range{0., 359.9999999, 0.}>
104 void update(
auto& o) { rebuild_transform(o.inputs, o.outputs); }
106struct ScaleControl : halp::xyz_spinboxes_f32<"Scale", halp::range{0.00001, 1000., 1.}>
108 void update(
auto& o) { rebuild_transform(o.inputs, o.outputs); }
113 void update(
auto& obj) { obj.update(); }
120 halp_meta(name,
"Geometry");
121 halp::position_normals_texcoords_geometry_volume
mesh;
122 float transform[16]{};
123 bool dirty_mesh =
false;
124 bool dirty_transform =
false;
Definition TinyObj.hpp:98
Definition TinyObj.hpp:117
Definition TinyObj.hpp:103
Definition TinyObj.hpp:107
Definition TinyObj.hpp:112
Definition TinyObj.hpp:27