Files
SimpleRayTracing/header/Geometry/Triangle.h
Misaki 17872804c5 Update project files and enhance rendering system
Added:
- Updated `.gitignore` to ignore the `[Bb]uild/` directory.
- Additional tasks added to the roadmap in `README.md` for light unit standardization and GPU backend support.

Changed:
- Removed line in `settings.json` that disabled error squiggles for C/C++ code.
- Modified `Triangle.h` to include `material_id` in `triangle_t` and reorganized properties.
- Reordered parameters in `triangle_collection_init` for clarity.
- Updated `shading_context_t` in `Material.h` and added size parameter to `material_create`.
- Streamlined initialization in `scene_init` and updated `scene_free` for proper resource management.
- Updated `window_create` in `Window.h` to accept a `render_job_t` parameter.
- Introduced `renderer_start` in `Renderer.c` to handle rendering jobs and optimized pixel rendering logic.
2025-04-23 22:24:02 +09:00

53 lines
1.6 KiB
C

#ifndef TRIANGLE_H
#define TRIANGLE_H
#include "Common.h"
#include "Geometry/AABB.h"
#include <stdint.h>
typedef struct
{
vec3s point_1;
vec3s point_2;
vec3s point_3;
vec3s normal_1;
vec3s normal_2;
vec3s normal_3;
vec3s normal_face;
uint8_t material_id;
}triangle_t;
//TODO: Handle triangle remove, we can use something like sparse set.
typedef struct
{
uint64_t count;
uint64_t size;
triangle_t* buffer;
}triangle_collection_t;
bool triangle_collection_init(triangle_collection_t* triangles, size_t size);
void triangle_collection_resize(triangle_collection_t* collection, size_t size);
void triangle_collection_free(triangle_collection_t* collection);
void triangle_create_with_normals(vec3s point1, vec3s point2, vec3s point3,
vec3s normal1, vec3s normal2, vec3s normal3,
uint8_t material_id, triangle_collection_t* collection);
void triangle_create(vec3s point1, vec3s point2, vec3s point3, uint8_t material_id, triangle_collection_t* collection);
inline vec3s triangle_centroid(const triangle_t triangle)
{
return glms_vec3_scale(glms_vec3_add(glms_vec3_add(triangle.point_1, triangle.point_2), triangle.point_3), 1.0f / 3.0f);
}
inline aabb_t compute_bounds_triangle(triangle_t triangle)
{
aabb_t bounds;
bounds.min = glms_vec3_minv(triangle.point_1, glms_vec3_minv(triangle.point_2, triangle.point_3));
bounds.max = glms_vec3_maxv(triangle.point_1, glms_vec3_maxv(triangle.point_2, triangle.point_3));
return bounds;
}
#endif // TRIANGLE_H