Files
SimpleRayTracing/header/Geometry/Triangle.h
Misaki 3de6b83d32 Set C standard to C11 and add new assets
Changed CMakeLists.txt to set the C standard to C11.
Added multiple binary image files for new visual assets.
Added several new image files to enhance rendering capabilities.
Changed stb_image.h to improve support for various image formats.
Changed ray tracing engine to enhance ray creation and intersection.
Changed triangle structure to use a vertex array for better attribute handling.
Changed scene initialization to accommodate new texture management.
2025-04-29 01:43:52 +09:00

53 lines
1.4 KiB
C

#ifndef TRIANGLE_H
#define TRIANGLE_H
#include "Common.h"
#include "Geometry/AABB.h"
#include <stdint.h>
typedef struct
{
vec3s position;
vec3s normal;
vec3s color;
vec2s uv;
} vertex_t;
typedef struct
{
vertex_t vertices[3];
vec3s face_normal;
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(size_t size, triangle_collection_t* triangles);
void triangle_collection_resize(triangle_collection_t* collection, size_t size);
void triangle_collection_free(triangle_collection_t* collection);
void triangle_create(vertex_t v1, vertex_t v2, vertex_t v3, 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.vertices[0].position, triangle.vertices[1].position), triangle.vertices[2].position), 1.0f / 3.0f);
}
inline aabb_t compute_bounds_triangle(triangle_t triangle)
{
aabb_t bounds;
bounds.min = glms_vec3_minv(triangle.vertices[0].position, glms_vec3_minv(triangle.vertices[1].position, triangle.vertices[2].position));
bounds.max = glms_vec3_maxv(triangle.vertices[0].position, glms_vec3_maxv(triangle.vertices[1].position, triangle.vertices[2].position));
return bounds;
}
#endif // TRIANGLE_H