VoxelEngine
 
Loading...
Searching...
No Matches
Algorithms.h
1#pragma once
2
3#include <glm/glm.hpp>
4#include <memory>
5
6#include "block/Face.h"
7
8namespace engine {
9 class Block;
10 class World;
11 class Chunk;
12 class Face;
13 class Geometry;
14 using UnaryPredicate = std::function<bool(const Block*, const Face*)>;
15
16 // TODO maybe add state?
17 struct DDAResult {
19 glm::vec3 position;
20 glm::vec3 faceNormal;
21 FaceTag faceTag;
22 const Block* block;
23 float distance;
24 std::shared_ptr<Chunk> chunk;
25 };
26
27 struct Ray {
28 glm::vec3 origin;
29 glm::vec3 direction;
30 };
31 struct Triangle {
32 glm::vec3 p1, p2, p3;
33 };
34
35 // https://gamedev.stackexchange.com/questions/47362/cast-ray-to-select-block-in-voxel-game/49423#49423
36 DDAResult DDA(
37 World& world, glm::vec3 start, glm::vec3 direction, float length, UnaryPredicate pred
38 ) noexcept;
39
40
41 const Face* getAimedFace(const Ray& ray, const Geometry* geometry) noexcept;
42
50 float rayTriangleIntersection(const Ray& ray, Triangle& t, float& uOut, float& vOut) noexcept;
51
52 glm::vec3 rotatePoint(
53 const glm::vec3& point,
54 const glm::vec3& axis,
55 float angle,
56 const glm::vec3& center = {0.5f, 0.5f, 0.5f}
57 );
58
59 std::vector<glm::vec3> rotatePoints(
60 const std::vector<glm::vec3>& points,
61 const glm::vec3& axis,
62 float angle,
63 const glm::vec3& center = {0.5f, 0.5f, 0.5f}
64 );
65} // namespace engine
Definition Block.h:31
Definition Geometry.h:13
Definition World.h:34
Definition Algorithms.h:17
glm::vec3 position
The position of the block in world space.
Definition Algorithms.h:19
Definition Face.h:32
Definition Algorithms.h:27
Definition Algorithms.h:31