add transform mode and tollbar button, implement polygon clipping with uvs interpolation and cube faces projection with near plane clipping, add duplicate points removal template function, implement Spere mesh surface section creation.
This commit is contained in:
38
src/util.h
38
src/util.h
@@ -6,6 +6,21 @@
|
||||
#define GL(stmt) stmt
|
||||
#endif
|
||||
|
||||
struct vertex_t
|
||||
{
|
||||
glm::vec4 pos;
|
||||
glm::vec2 uvs;
|
||||
glm::vec2 uvs2;
|
||||
vertex_t() : pos(0), uvs(0), uvs2(0) {}
|
||||
vertex_t(glm::vec2 p) : pos(p, 0, 1), uvs(0), uvs2(0) {}
|
||||
vertex_t(glm::vec2 p, glm::vec2 uv) : pos(p, 0, 1), uvs(uv), uvs2(0) {}
|
||||
vertex_t(glm::vec3 p) : pos(p, 1), uvs(0), uvs2(0) {}
|
||||
vertex_t(glm::vec3 p, glm::vec2 uv) : pos(p, 1), uvs(uv), uvs2(0) {}
|
||||
vertex_t(glm::vec4 p) : pos(p), uvs(0), uvs2(0) {}
|
||||
vertex_t(glm::vec4 p, glm::vec2 uv) : pos(p), uvs(uv), uvs2(0) {}
|
||||
vertex_t(glm::vec4 p, glm::vec2 uv, glm::vec2 uv2) : pos(p), uvs(uv), uvs2(uv2) {}
|
||||
};
|
||||
|
||||
uint16_t constexpr const_hash(const char* input)
|
||||
{
|
||||
return *input ?
|
||||
@@ -13,11 +28,32 @@ uint16_t constexpr const_hash(const char* input)
|
||||
5381;
|
||||
}
|
||||
|
||||
template<class T>
|
||||
std::vector<T> poly_remove_duplicate(const std::vector<T>& v, const float tollerance = 0.001)
|
||||
{
|
||||
std::vector<T> ret;
|
||||
for (size_t i = 0; i < v.size(); i++)
|
||||
{
|
||||
if (glm::distance2(v[i], v[(i + 1) % v.size()]) > tollerance)
|
||||
ret.push_back(v[i]);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
template<>
|
||||
std::vector<vertex_t> poly_remove_duplicate<vertex_t>(const std::vector<vertex_t>& v, const float tollerance);
|
||||
|
||||
bool point_in_rect(const glm::vec2& point, const glm::vec4& rect);
|
||||
glm::vec4 rect_intersection(glm::vec4 a, glm::vec4 b);
|
||||
glm::vec4 rect_union(glm::vec4 a, glm::vec4 b);
|
||||
bool ray_intersect(glm::vec3 ray_origin, glm::vec3 ray_dir, glm::vec3 plane_origin,
|
||||
glm::vec3 plane_normal, glm::vec3 plane_tangent, glm::vec3& out_hit, float& out_t);
|
||||
bool segments_intersect(const glm::vec2& p0a, const glm::vec2& p0b,
|
||||
const glm::vec2& p1a, const glm::vec2& p1b, glm::vec2& out_pt);
|
||||
const glm::vec2& p1a, const glm::vec2& p1b, glm::vec2& out_pt, glm::vec2& out_hit_uv);
|
||||
bool point_side(glm::vec2 a, glm::vec2 b, glm::vec2 p);
|
||||
std::vector<vertex_t> poly_intersect(const std::vector<vertex_t>& poly, const std::vector<glm::vec2>& clip);
|
||||
std::vector<glm::vec2> poly_intersect(const std::vector<glm::vec2>& poly, const std::vector<glm::vec2>& clip);
|
||||
std::vector<glm::vec3> poly_clip_near(const std::vector<glm::vec3>& poly, float near_plane_distance);
|
||||
glm::vec4 rand_color();
|
||||
glm::vec3 convert_hsv2rgb(const glm::vec3 c);
|
||||
glm::vec3 convert_rgb2hsv(const glm::vec3 c);
|
||||
|
||||
Reference in New Issue
Block a user