BSPParser
Simple and modern library for parsing the Valve BSP format
Loading...
Searching...
No Matches
triangulated-displacement.hpp
1#pragma once
2
3#include "../structs/displacements.hpp"
4#include "../structs/geometry.hpp"
5#include "../structs/textures.hpp"
6#include "../vertex.hpp"
7#include <functional>
8#include <span>
9#include <vector>
10
11namespace BspParser {
16 public:
17 static constexpr uint8_t CORNER_LOWER_LEFT = 0;
18 static constexpr uint8_t CORNER_UPPER_LEFT = 1;
19 static constexpr uint8_t CORNER_UPPER_RIGHT = 2;
20 static constexpr uint8_t CORNER_LOWER_RIGHT = 3;
21
22 static constexpr uint8_t EDGE_LEFT = 0;
23 static constexpr uint8_t EDGE_TOP = 1;
24 static constexpr uint8_t EDGE_RIGHT = 2;
25 static constexpr uint8_t EDGE_BOTTOM = 3;
26
28 const Structs::DispInfo& dispInfo,
29 std::span<const Structs::DispVert> dispVertices,
30 std::span<const Structs::Edge> edges,
31 std::span<const Structs::Vector> vertices,
32 std::span<const int32_t> surfaceEdges,
33 const Structs::TexInfo& textureInfo,
34 const Structs::TexData& textureData
35 );
36
37 Structs::DispInfo dispInfo;
38 Structs::TexInfo textureInfo;
39 Structs::TexData textureData;
40
41 std::vector<Vertex> vertices;
42
43 size_t numVerticesPerAxis;
44
45 std::array<Structs::DispNeighbour, 4> edgeNeighbours;
46 std::array<std::vector<uint16_t>, 4> cornerNeighbours;
47
48 [[nodiscard]] size_t getTriangleListIndexCount() const;
49 void generateTriangleListIndices(const std::function<void(uint32_t i0, uint32_t i1, uint32_t i2)>& iteratee) const;
50
51 private:
52 [[nodiscard]] std::vector<Vertex> triangulate(
53 std::span<const Structs::DispVert> dispVertices,
54 std::span<const Structs::Edge> edges,
55 std::span<const Structs::Vector> vertices,
56 std::span<const int32_t> surfaceEdges
57 ) const;
58
59 void generateInternalNormals();
60 [[nodiscard]] Structs::Vector generateInternalNormal(size_t x, size_t y) const;
61
62 [[nodiscard]] size_t getVertexIndex(size_t x, size_t y) const;
63 [[nodiscard]] const Vertex& getVertex(size_t x, size_t y) const;
64 };
65}
Definition: triangulated-displacement.hpp:15
Definition: BSPParser.hpp:8
Definition: displacements.hpp:29
Definition: textures.hpp:15
Definition: textures.hpp:8
Definition: common.hpp:18
Definition: vertex.hpp:6