Monopoly — Portage moderne 0.1.0
Portage moderne C/C++23 du Monopoly de 1999
Loading...
Searching...
No Matches
World3DProjection.hpp
Go to the documentation of this file.
1#pragma once
2
3#include "MeshRuntime.hpp"
5
6#include <array>
7#include <cstdint>
8#include <expected>
9#include <optional>
10
11namespace monopoly::engine
12{
14 {
15 std::int32_t left{};
16 std::int32_t top{};
17 std::int32_t right{};
18 std::int32_t bottom{};
19
21 { return left >= right || top >= bottom; }
22 auto operator<=>(const World3DRect&) const = default;
23 };
24
26 {
27 std::array<float, 3> location{0.0F, 0.0F, -320.0F};
28 std::array<float, 3> forward{0.0F, 0.0F, 1.0F};
29 std::array<float, 3> up{0.0F, 1.0F, 0.0F};
30 float fieldOfView{0.7853981633974483F};
31 float nearPlane{1.0F};
32 float farPlane{5000.0F};
33 auto operator<=>(const World3DCamera&) const = default;
34 };
35
36 inline constexpr float MonopolyBoardNearPlane = 10.0F;
37 inline constexpr float MonopolyBoardFarPlane = 1540.0F;
38
46
51
53 {
58 // Portable raster equivalent of D3DVIEWPORT2 clip-aspect handling.
59 // The historical projection matrix itself stays untouched above.
63 };
64
65 [[nodiscard]] std::expected<World3DProjectionState, World3DProjectionError>
66 makeWorld3DProjectionState(World3DRect viewport, World3DCamera camera = {});
67
68 [[nodiscard]] std::optional<World3DRect> world3DMeshScreenRect(
69 const data::MeshBounds& bounds,
70 const sequence::Matrix3D& worldTransform,
71 const World3DProjectionState& projection) noexcept;
72
73 [[nodiscard]] std::optional<World3DRect> intersectWorld3DRect(
74 World3DRect left, World3DRect right) noexcept;
75}
std::atomic< float > left
std::atomic< float > right
unsigned index
constexpr float MonopolyBoardFarPlane
std::optional< World3DRect > world3DMeshScreenRect(const data::MeshBounds &bounds, const sequence::Matrix3D &worldTransform, const World3DProjectionState &projection) noexcept
std::optional< World3DRect > intersectWorld3DRect(World3DRect left, World3DRect right) noexcept
std::expected< World3DProjectionState, World3DProjectionError > makeWorld3DProjectionState(World3DRect viewport, World3DCamera camera)
constexpr float MonopolyBoardNearPlane
auto operator<=>(const World3DCamera &) const =default
auto operator<=>(const World3DRect &) const =default