1
Fork 0

Remove hardcoded PI constant, remove const in declarations

This commit is contained in:
Joshua Goins 2024-09-25 10:40:38 +02:00
parent 58fbe465f9
commit 3ae3ae7e6d
2 changed files with 12 additions and 14 deletions

View file

@ -26,8 +26,8 @@ struct TriangleBox {
struct Object;
glm::vec3 fetch_position(const Object& object, const tinyobj::mesh_t& mesh, const int32_t index, const int32_t vertex);
glm::vec3 fetch_normal(const Object& object, const tinyobj::mesh_t& mesh, const int32_t index, const int32_t vertex);
glm::vec3 fetch_position(const Object& object, const tinyobj::mesh_t& mesh, int32_t index, int32_t vertex);
glm::vec3 fetch_normal(const Object& object, const tinyobj::mesh_t& mesh, int32_t index, int32_t vertex);
struct Object {
glm::vec3 position = glm::vec3(0);
@ -48,7 +48,7 @@ struct Object {
const glm::vec3 v1 = fetch_position(*this, shape.mesh, i, 1);
const glm::vec3 v2 = fetch_position(*this, shape.mesh, i, 2);
AABB extent;
AABB extent{};
extent.min = glm::min(v0, v1);
extent.min = glm::min(extent.min, v2);
@ -101,13 +101,13 @@ struct HitResult {
const Object* object = nullptr;
};
std::optional<HitResult> test_mesh(const Ray ray, const Object& object, const tinyobj::mesh_t& mesh, float& tClosest);
std::optional<HitResult> test_scene(const Ray ray, const Scene& scene);
std::optional<HitResult> test_scene_octree(const Ray ray, const Scene& scene);
std::optional<HitResult> test_mesh(Ray ray, const Object& object, const tinyobj::mesh_t& mesh, float& tClosest);
std::optional<HitResult> test_scene(Ray ray, const Scene& scene);
std::optional<HitResult> test_scene_octree(Ray ray, const Scene& scene);
struct SceneResult {
HitResult hit;
glm::vec3 direct, indirect, reflect, combined;
};
std::optional<SceneResult> cast_scene(const Ray ray, Scene& scene, const bool use_bvh, const int depth = 0);
std::optional<SceneResult> cast_scene(Ray ray, Scene& scene, bool use_bvh, int depth = 0);

View file

@ -1,9 +1,7 @@
#include "scene.h"
#include <functional>
#include <glm/gtx/perpendicular.hpp>
constexpr double pi = 3.14159265358979323846l;
#include <numbers>
glm::vec3 fetch_position(const Object& object, const tinyobj::mesh_t& mesh, const int32_t index, const int32_t vertex) {
const tinyobj::index_t idx = mesh.indices[(index * 3) + vertex];
@ -12,7 +10,7 @@ glm::vec3 fetch_position(const Object& object, const tinyobj::mesh_t& mesh, cons
const auto vy = object.attrib.vertices[3 * idx.vertex_index + 1];
const auto vz = object.attrib.vertices[3 * idx.vertex_index + 2];
return glm::vec3(vx, vy, vz);
return {vx, vy, vz};
}
glm::vec3 fetch_normal(const Object& object, const tinyobj::mesh_t& mesh, const int32_t index, const int32_t vertex) {
@ -22,7 +20,7 @@ glm::vec3 fetch_normal(const Object& object, const tinyobj::mesh_t& mesh, const
const auto ny = object.attrib.normals[3 * idx.normal_index + 1];
const auto nz = object.attrib.normals[3 * idx.normal_index + 2];
return glm::vec3(nx, ny, nz);
return {nx, ny, nz};
}
bool test_triangle(
@ -178,7 +176,7 @@ std::pair<glm::vec3, glm::vec3> orthogonal_system(const glm::vec3& v1) {
glm::vec3 hemisphere(const double u1, const double u2) {
const double r = sqrt(1.0 - u1 * u1);
const double phi = 2 * pi * u2;
const double phi = 2 * std::numbers::pi * u2;
return {cos(phi) * r, sin(phi) * r, u1};
}
@ -218,7 +216,7 @@ std::optional<SceneResult> cast_scene(const Ray ray, Scene& scene, const bool us
// and naive monte carlo without PDF
if (num_indirect_samples > 0) {
for (int i = 0; i < num_indirect_samples; i++) {
const float theta = scene.distribution() * pi;
const float theta = scene.distribution() * std::numbers::pi;
const float cos_theta = cos(theta);
const float sin_theta = sin(theta);