54 lines
1.3 KiB
C++
54 lines
1.3 KiB
C++
#pragma once
|
|
|
|
#include <string>
|
|
|
|
#include <glm/vec2.hpp>
|
|
#include <glm/vec3.hpp>
|
|
|
|
namespace util {
|
|
|
|
float randf_0_1();
|
|
float randf_m1_1();
|
|
|
|
glm::vec2 randv2_m1_1();
|
|
glm::vec2 randv2_0_1();
|
|
|
|
float deg2rad(float deg);
|
|
float rad2deg(float rad);
|
|
|
|
// split on whitespace into first token and the rest.
|
|
// return true if whitespace was found or just the token.
|
|
bool splitIntoTokenAndRest(const std::string &str, std::string &token, std::string &rest);
|
|
|
|
/**
|
|
* Test for intersection in positive direction of a ray.
|
|
* TODO: support inside?
|
|
*/
|
|
class IntersectionTest {
|
|
public:
|
|
IntersectionTest();
|
|
|
|
// creates a valid intersection point at distance d
|
|
IntersectionTest(float d);
|
|
|
|
// intersection distance
|
|
float distance() const;
|
|
|
|
glm::vec3 pointAtDistance(float d);
|
|
|
|
// returns true if there's an interseciton.
|
|
bool valid() const;
|
|
|
|
// return true if there's an intersection. then intersectionPoint is filled
|
|
// with details.
|
|
bool raySphere(
|
|
const glm::vec3 &rayPos, const glm::vec3 &rayDir,
|
|
const glm::vec3 &spherePos, float sphereRadius);
|
|
|
|
private:
|
|
bool m_valid;
|
|
float m_distance;
|
|
glm::vec3 m_rayPos;
|
|
glm::vec3 m_rayDir;
|
|
};
|
|
}
|